Primality by trial division: Difference between revisions
Content added Content deleted
(→{{header|RPL}}: Floating point version) |
|||
Line 4,291: | Line 4,291: | ||
|- |
|- |
||
| |
| |
||
≪ / LAST ROT * - #0 == ≫ ' |
≪ / LAST ROT * - #0 == ≫ '<span style="color:blue">BDIV?</span>' STO |
||
≪ |
≪ |
||
'''IF''' DUP #3 ≤ '''THEN''' #2 / B→R |
'''IF''' DUP #3 ≤ '''THEN''' #2 / B→R |
||
'''ELSE''' |
'''ELSE''' |
||
'''IF''' DUP #2 |
'''IF''' DUP #2 <span style="color:blue">BDIV?</span> OVER #3 '''BDIV?''' OR |
||
'''THEN''' DROP 0 |
'''THEN''' DROP 0 |
||
'''ELSE''' |
'''ELSE''' |
||
Line 4,302: | Line 4,302: | ||
≪ a #2 #5 1 SF |
≪ a #2 #5 1 SF |
||
'''WHILE''' 1 FS? OVER maxd ≤ AND '''REPEAT''' |
'''WHILE''' 1 FS? OVER maxd ≤ AND '''REPEAT''' |
||
'''IF''' a OVER |
'''IF''' a OVER <span style="color:blue">BDIV?</span> '''THEN''' 1 CF '''END''' |
||
OVER + #6 ROT - SWAP '''END''' |
OVER + #6 ROT - SWAP '''END''' |
||
≫ |
≫ |
||
SWAP DROP |
SWAP DROP <span style="color:blue">BDIV?</span> NOT |
||
'''END''' |
'''END''' |
||
'''END''' |
'''END''' |
||
≫ ' |
≫ '<span style="color:blue">BPRIM?</span>' STO |
||
| |
| |
||
''( #a #b -- boolean )'' |
<span style="color:blue">BDIV?</span> ''( #a #b -- boolean )'' |
||
''( #a -- boolean )'' |
<span style="color:blue">BPRIM?</span> ''( #a -- boolean )'' |
||
return 1 if a is 2 or 3 |
return 1 if a is 2 or 3 |
||
Line 4,329: | Line 4,329: | ||
|} |
|} |
||
'''Floating point version''' |
|||
Faster but limited to 1E12. |
|||
≪ '''IF''' DUP 5 ≤ '''THEN''' { 2 3 5 } SWAP POS |
|||
'''ELSE''' |
|||
'''IF''' DUP 2 MOD NOT '''THEN''' 2 |
|||
'''ELSE''' |
|||
DUP √ CEIL → lim |
|||
≪ 3 '''WHILE''' DUP2 MOD OVER lim ≤ AND '''REPEAT''' 2 + '''END''' |
|||
≫ |
|||
'''END''' MOD |
|||
'''END''' SIGN |
|||
≫ '<span style="color:blue">PRIM?</span>' STO |
|||
=={{header|Ruby}}== |
=={{header|Ruby}}== |