Mersenne primes: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: added syntax colouring the hard way) |
(add PicoLisp) |
||
Line 1,119: | Line 1,119: | ||
2 ^ 31 - 1 |
2 ^ 31 - 1 |
||
2 ^ 61 - 1 |
2 ^ 61 - 1 |
||
</pre> |
|||
=={{header|PicoLisp}}== |
|||
<lang PicoLisp>(de **Mod (X Y N) |
|||
(let M 1 |
|||
(loop |
|||
(when (bit? 1 Y) |
|||
(setq M (% (* M X) N)) ) |
|||
(T (=0 (setq Y (>> 1 Y))) |
|||
M ) |
|||
(setq X (% (* X X) N)) ) ) ) |
|||
(de isprime (N) |
|||
(cache '(NIL) N |
|||
(if (== N 2) |
|||
T |
|||
(and |
|||
(> N 1) |
|||
(bit? 1 N) |
|||
(let (Q (dec N) N1 (dec N) K 0 X) |
|||
(until (bit? 1 Q) |
|||
(setq |
|||
Q (>> 1 Q) |
|||
K (inc K) ) ) |
|||
(catch 'composite |
|||
(do 16 |
|||
(loop |
|||
(setq X |
|||
(**Mod |
|||
(rand 2 (min (dec N) 1000000000000)) |
|||
Q |
|||
N ) ) |
|||
(T (or (=1 X) (= X N1))) |
|||
(T |
|||
(do K |
|||
(setq X (**Mod X 2 N)) |
|||
(when (=1 X) (throw 'composite)) |
|||
(T (= X N1) T) ) ) |
|||
(throw 'composite) ) ) |
|||
(throw 'composite T) ) ) ) ) ) ) |
|||
(for N 1000 |
|||
(and |
|||
(isprime (dec (** 2 N))) |
|||
(prinl "2 \^ " N " - 1") ) )</lang> |
|||
{{out}} |
|||
<pre> |
|||
2 ^ 2 - 1 |
|||
2 ^ 3 - 1 |
|||
2 ^ 5 - 1 |
|||
2 ^ 7 - 1 |
|||
2 ^ 13 - 1 |
|||
2 ^ 17 - 1 |
|||
2 ^ 19 - 1 |
|||
2 ^ 31 - 1 |
|||
2 ^ 61 - 1 |
|||
2 ^ 89 - 1 |
|||
2 ^ 107 - 1 |
|||
2 ^ 127 - 1 |
|||
2 ^ 521 - 1 |
|||
2 ^ 607 - 1 |
|||
</pre> |
</pre> |
||