Lucas-Lehmer test: Difference between revisions
Content added Content deleted
m (→{{header|D}}: + D) |
m (→{{header|D}}: buggy, fixed & remove thread version // still buggy, missing 9689 & 21701... or may be bigint broken?) |
||
Line 308: | Line 308: | ||
=={{header|D}}== |
=={{header|D}}== |
||
{{trans|Python}} |
{{trans|Python}} |
||
<lang d>import std.stdio |
<lang d>import std.stdio, std.math, std.bigint; |
||
import std.bigint, core.thread ; |
|||
bool isPrime(int p) { |
bool isPrime(int p) { |
||
if(p < 2 || p % 2 == 0) return p == 2 ; |
if(p < 2 || p % 2 == 0) return p == 2 ; |
||
foreach( i ; |
foreach( i ; 3..cast(uint)(sqrt(p)) + 1) |
||
if(p % i == 0) |
if(p % i == 0) |
||
return false ; |
return false ; |
||
Line 324: | Line 323: | ||
auto mp = (BigInt(1) << p) - 1 ; |
auto mp = (BigInt(1) << p) - 1 ; |
||
auto s = BigInt(4) ; |
auto s = BigInt(4) ; |
||
foreach(_ ; |
foreach(_ ; 3..p+1) |
||
s = (s*s - 2) % mp ; |
s = (s*s - 2) % mp ; |
||
return s == 0 ; |
return s == 0 ; |
||
} |
} |
||
⚫ | |||
void main() { |
void main() { |
||
⚫ | |||
auto tgroup = new ThreadGroup ; |
|||
⚫ | |||
tgroup.add(new class (p) Thread { |
|||
⚫ | |||
this(int n) { num = n ; super(&run) ; } |
|||
⚫ | |||
⚫ | |||
result ~= num ; |
|||
⚫ | |||
}) ; |
|||
foreach(t ; tgroup) |
|||
t.start() ; |
|||
tgroup.joinAll() ; |
|||
⚫ | |||
writeln(reduce!`a~" "~b`(map!`"M"~to!string(a)`(result.sort))) ; |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
}</lang> |
}</lang> |
||
Output: |
Output: |
||
<pre>M2 M5 M7 M13 M17 M19 M31 M61 M89 M107 M127 M521 M607</pre> |
<pre> M2 M3 M5 M7 M13 M17 M19 M31 M61 M89 M107 M127 M521 M607 M1279 M2203 M2281 M3217 M4253 M4423 M9941</pre> |
||
=={{header|Erlang}}== |
=={{header|Erlang}}== |
||
<lang erlang>-module(mp). |
<lang erlang>-module(mp). |