Factors of a Mersenne number: Difference between revisions

Content deleted Content added
m →‎{{header|Perl}}: wrong output
Updated D code
Line 364:
 
=={{header|D}}==
<lang d>import std.stdio, std.math, std.traits;
 
ulong mersenneFactor(in ulong p) pure nothrow {
ulongstatic limitbool = castisPrime(ulongT) sqrt(2in ^^T pn) -pure 1);nothrow {
for (ulong k = 1;if 2(n *< p2 *|| kn -% 12 < limit;== k++0) {
ulong q = 2 *return pn *== k + 12;
iffor (isPrime(q) && (q %Unqual!T 8i == 13; ||i q^^ %2 8 =<= 7)n; &&i modpow(2, p, q) =+= 12) {
returnif q;(n % i == 0)
} return false;
return 0true;
}
return 0;
}
 
static long modpowmodPow(in long bcb,in long ece,in long m) pure nothrow{
long resultb = 1cb;
while (e > 0) {long result = 1;
iffor ((long e &= 1)ce; =e > 0; e >>= 1) {
result =if (result(e *& b1) %== m;1)
result = (result * b) % m;
b = (b ^^ 2) % m;
}
breturn = (b * b) % mresult;
e >>= 1;
}
return result;
}
 
immutable ulong limit = cast(ulong)sqrt(2 ^^ p - 1);
bool isPrime(T) (T n) {
iffor (nulong <k = 1; (2 ||* np %* 2k ==- 01) return< nlimit; ==k++) 2;{
for (T i = 3immutable ;ulong iq *= i2 <=* np ;* ik += 2) {1;
if (nisPrime(q) && (q % 8 == 1 || q % i8 == 07) {&&
returnmodPow(2, false;p, q) == 1)
} return q;
}
return true0;
}
 
Line 402 ⟶ 400:
writefln("Factor of M929: %s", mersenneFactor(929));
}</lang>
Output:
<pre>Factor of M929: 13007</pre>
 
=={{header|Forth}}==