Lucas-Lehmer test: Difference between revisions
Content added Content deleted
(→{{header|C sharp|C#}}: Removed run times as not being part of the task description.) |
m (→{{header|D}}: + D) |
||
Line 306: | Line 306: | ||
(2 3 5 7 13 17 19 31 61 89 107 127 521 607 1279 2203 2281 3217 4253... |
(2 3 5 7 13 17 19 31 61 89 107 127 521 607 1279 2203 2281 3217 4253... |
||
=={{header|D}}== |
|||
{{trans|Python}} |
|||
<lang d>import std.stdio, std.algorithm, std.range, std.math, std.conv ; |
|||
import std.bigint, core.thread ; |
|||
bool isPrime(int p) { |
|||
if(p < 2 || p % 2 == 0) return p == 2 ; |
|||
foreach( i ; iota(3, max(to!uint(sqrt(p)),3) + 1,2)) |
|||
if(p % i == 0) |
|||
return false ; |
|||
return true ; |
|||
} |
|||
bool isMersennePrime(int p) { |
|||
if(!isPrime(p)) return false ; |
|||
if(p == 2) return true ; |
|||
auto mp = (BigInt(1) << p) - 1 ; |
|||
auto s = BigInt(4) ; |
|||
foreach(_ ; iota(3, p + 1)) |
|||
s = (s*s - 2) % mp ; |
|||
return s == 0 ; |
|||
} |
|||
void main() { |
|||
int[] result ; |
|||
auto tgroup = new ThreadGroup ; |
|||
foreach(p ; iota(2,1000)) |
|||
tgroup.add(new class (p) Thread { |
|||
int num ; |
|||
this(int n) { num = n ; super(&run) ; } |
|||
private void run() { |
|||
if(isMersennePrime(num)) |
|||
result ~= num ; |
|||
} |
|||
}) ; |
|||
foreach(t ; tgroup) |
|||
t.start() ; |
|||
tgroup.joinAll() ; |
|||
writeln(reduce!`a~" "~b`(map!`"M"~to!string(a)`(result.sort))) ; |
|||
}</lang> |
|||
Output: |
|||
<pre>M2 M5 M7 M13 M17 M19 M31 M61 M89 M107 M127 M521 M607</pre> |
|||
=={{header|Erlang}}== |
=={{header|Erlang}}== |
||
<lang erlang>-module(mp). |
<lang erlang>-module(mp). |