Miller–Rabin primality test: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: reinstated original output introduction text.) |
(added FunL) |
||
Line 1,090: | Line 1,090: | ||
end program TestMiller</lang> |
end program TestMiller</lang> |
||
''Possible improvements'': create bindings to the [[:Category:GMP|GMP library]], change <code>integer(huge)</code> into something like <code>type(huge_integer)</code>, write a lots of interfaces to allow to use big nums naturally (so that the code will be unchanged, except for the changes said above) |
''Possible improvements'': create bindings to the [[:Category:GMP|GMP library]], change <code>integer(huge)</code> into something like <code>type(huge_integer)</code>, write a lots of interfaces to allow to use big nums naturally (so that the code will be unchanged, except for the changes said above) |
||
=={{header|FunL}}== |
|||
Direct implementation of the task algorithm. |
|||
<lang funl>import util.rnd |
|||
def isProbablyPrimeMillerRabin( n, k ) = |
|||
n_1 = n - 1 |
|||
d = n_1 |
|||
s = 0 |
|||
while 2|d |
|||
s++ |
|||
d /= 2 |
|||
for _ <- 1..k |
|||
a = rnd( 2, n ) |
|||
x = a^d%n |
|||
if x == 1 or x == n - 1 then continue |
|||
for r <- 1..s - 1 |
|||
x = x^2%n |
|||
if x == 1 then return false |
|||
if x == n_1 then break |
|||
else |
|||
return false |
|||
true |
|||
for i <- 3..100 |
|||
if isProbablyPrimeMillerRabin( i, 5 ) |
|||
println( i )</lang> |
|||
{{out}} |
|||
<pre> |
|||
3 |
|||
5 |
|||
7 |
|||
11 |
|||
13 |
|||
17 |
|||
19 |
|||
23 |
|||
29 |
|||
31 |
|||
37 |
|||
41 |
|||
43 |
|||
47 |
|||
53 |
|||
59 |
|||
61 |
|||
67 |
|||
71 |
|||
73 |
|||
79 |
|||
83 |
|||
89 |
|||
97 |
|||
</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |