12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #!perl -T
- use utf8;
- use 5.006;
- use strict;
- use warnings;
- use Test::More;
- plan tests => 1;
- use Sidef;
- my $code = <<'EOT';
- func mtest(b, p) {
- var bits = b.base(2).digits
- for (var sq = 1; bits; sq %= p) {
- sq *= sq;
- sq += sq if bits.shift==1
- }
- sq == 1
- }
- var results = []
- for m in (2..53 -> lazy.grep{.is_prime}) {
- var f = 0
- var x = (2**m - 1)
- var q
- { |k|
- q = (2*k*m + 1)
- q%8 ~~ [1,7] || q.is_prime || next
- q*q > x || (f = mtest(m, q)) && break
- } << 1..Inf
- results << (f ? "#{m}:#{q}" : "#{m}:p")
- }
- results.join(' ')
- EOT
- my $sidef = Sidef->new(name => 'factors_of_mersenne_numbers');
- my $result = $sidef->execute_code($code);
- is("$result", '2:p 3:p 5:p 7:p 11:23 13:p 17:p 19:p 23:47 29:233 31:p 37:223 41:13367 43:431 47:2351 53:6361');
|