Miller–Rabin primality test: Difference between revisions
Content added Content deleted
(→{{header|Commodore BASIC}}: Turn "mod N" into a function; fix formatting; better example.) |
|||
Line 1,000: | Line 1,000: | ||
=={{header|Commodore BASIC}}== |
=={{header|Commodore BASIC}}== |
||
⚫ | |||
<lang basic>100 PRINT CHR$(147)CHR$(18)"**** MILLER-RABIN PRIMALITY TEST ****": PRINT |
<lang basic>100 PRINT CHR$(147); CHR$(18); "**** MILLER-RABIN PRIMALITY TEST ****": PRINT |
||
110 OPEN 1, 0 |
|||
110 INPUT "NUMBER TO TEST"; N$ |
|||
120 PRINT "ENTER N:";: INPUT#1, N$: PRINT |
|||
120 N = VAL(N$): IF N < 2 THEN 110 |
|||
130 IF 0 = (N AND 1) THEN PRINT "(EVEN)": GOTO 380 |
|||
140 INPUT "ITERATIONS"; K$ |
|||
150 PRINT "ENTER K:";: INPUT#1, K$: PRINT |
|||
150 K = VAL(K$): IF K < 1 THEN 140 |
|||
160 PRINT |
|||
170 CLOSE 1 |
|||
170 DEF FNMD(M) = M - N * INT(M / N) |
|||
180 D = N - 1 |
180 D = N - 1 |
||
190 S = 0 |
190 S = 0 |
||
Line 1,017: | Line 1,018: | ||
250 : X = 1 |
250 : X = 1 |
||
260 : FOR J = 1 TO D |
260 : FOR J = 1 TO D |
||
270 : X = X * A |
270 : X = FNMD(X * A) |
||
280 : |
280 : NEXT J |
||
290 : IF (X = 1) OR (X = (N - 1)) THEN 360 |
|||
⚫ | |||
300 : |
300 : FOR J = 1 TO S - 1 |
||
310 : |
310 : X = FNMD(X * X) |
||
320 : X = |
320 : IF X = 1 THEN P = 0: GOTO 370 |
||
330 : X = |
330 : IF X = N - 1 THEN 360 |
||
⚫ | |||
340 : IF X = 1 THEN P = 0: GOTO 390 |
|||
350 : |
350 : P = 0: GOTO 370 |
||
360 |
360 NEXT I |
||
370 |
370 P = P * (1 - 1 / (4 * K)) |
||
⚫ | |||
380 NEXT I |
|||
⚫ | |||
390 P = P * (1 - 1 / (4 * K)) |
|||
⚫ | |||
⚫ | |||
{{Out}} |
{{Out}} |
||
Sample runs. |
|||
⚫ | |||
<pre>**** MILLER-RABIN PRIMALITY TEST **** |
<pre>**** MILLER-RABIN PRIMALITY TEST **** |
||
ENTER N:1747 |
|||
NUMBER TO TEST? 1747 |
|||
ENTER K:2 |
|||
ITERATIONS? 2 |
|||
⚫ | |||
⚫ | |||
READY.</pre> |
READY.</pre> |
||
Line 1,044: | Line 1,045: | ||
<pre>**** MILLER-RABIN PRIMALITY TEST **** |
<pre>**** MILLER-RABIN PRIMALITY TEST **** |
||
ENTER N:4353 |
|||
ENTER K:2 |
|||
⚫ | |||
NUMBER TO TEST? 32329 |
|||
READY.</pre> |
|||
ITERATIONS? 2 |
|||
⚫ | |||
(Self-evident, since 4+3+5+3=15 is a multiple of 3.) |
|||
=={{header|Common Lisp}}== |
=={{header|Common Lisp}}== |