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 == ≫ ''''BDIV?'''' STO
≪ / 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 '''BDIV?''' OVER #3 '''BDIV?''' OR
'''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 '''BDIV?''' '''THEN''' 1 CF '''END'''
'''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 '''BDIV?''' NOT
SWAP DROP <span style="color:blue">BDIV?</span> NOT
'''END'''
'''END'''
'''END'''
'''END'''
≫ ''''BPRIM?'''' STO
≫ '<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}}==