Miller–Rabin primality test: Difference between revisions

Content added Content deleted
(→‎{{header|Bc}}: Allow rng to generate large numbers. While here, clean the code by removing extra semicolons.)
Line 490: Line 490:
(937 941 947 953 967 971 977 983 991 997)
(937 941 947 953 967 971 977 983 991 997)
</pre>
</pre>

=={{header|D}}==
<lang d>import std.random;

bool isProbablePrime(long n, int k) {
if (n < 2 || n % 2 == 0)
return n == 2;

long d = n - 1;
long s = 0;
while (d % 2 == 0) {
d /= 2;
s++;
}

bool isComposite(long a) {
if (modpow(a, d, n) == 1)
return false;
foreach (i; 0 .. s+1) {
if (modpow(a, 2^^i * d, n) == n-1)
return false;
}
return true;
}
foreach (i; 0 .. k+1) {
if (isComposite(uniform(2, n)))
return false;
}

return true;
}

long modpow(long b, long e, long m) {
long result = 1;
while (e > 0) {
if ((e & 1) == 1) {
result = (result * b) % m;
}
b = (b * b) % m;
e >>= 1;
}
return result;
}</lang>


=={{header|E}}==
=={{header|E}}==