Circular primes: Difference between revisions
Content added Content deleted
(refactored the code to reduce stack juggling in circular?) |
|||
Line 690: | Line 690: | ||
: prime? ( n -- f ) |
: prime? ( n -- f ) |
||
dup 2 < |
dup 2 < if drop false exit then |
||
if |
dup 2 mod 0= if 2 = exit then |
||
⚫ | |||
else |
|||
dup 5 mod 0= if 5 = exit then |
|||
⚫ | |||
if 2 = |
|||
else dup 3 mod 0= |
|||
if 3 = |
|||
else dup 5 mod 0= |
|||
if 5 = |
|||
⚫ | |||
⚫ | |||
then |
|||
then |
|||
then ; |
|||
: log10^ ( n -- 10^[log n], log n ) |
: log10^ ( n -- 10^[log n], log n ) |
||
Line 709: | Line 700: | ||
1 0 rot |
1 0 rot |
||
begin dup 9 > while |
begin dup 9 > while |
||
>r swap 10 * swap 1+ r> 10 / |
|||
repeat drop ; |
repeat drop ; |
||
Line 716: | Line 707: | ||
: rotate ( n -- n ) |
: rotate ( n -- n ) |
||
dup log10^ drop /mod swap 10 * + ; |
dup log10^ drop /mod swap 10 * + ; |
||
: prime-rotation? ( p0 p -- f ) |
|||
tuck <= swap prime? and ; |
|||
: circular? ( n -- f ) \ assume n is not a multiple of 2, 3, 5 |
: circular? ( n -- f ) \ assume n is not a multiple of 2, 3, 5 |
||
dup wheel-prime? invert |
dup wheel-prime? invert |
||
if drop false exit |
if drop false exit |
||
then dup >r |
then dup >r true |
||
over log10 0 ?do |
|||
rotate |
swap rotate j over prime-rotation? rot and |
||
loop nip rdrop ; |
|||
then swap 1- swap |
|||
repeat 2drop rdrop true ; |
|||
: .primes |
: .primes |
||
Line 744: | Line 736: | ||
2 3 5 7 11 13 17 37 79 113 197 199 337 1193 3779 11939 19937 193939 199933 |
2 3 5 7 11 13 17 37 79 113 197 199 337 1193 3779 11939 19937 193939 199933 |
||
</pre> |
</pre> |
||
=={{header|FreeBASIC}}== |
=={{header|FreeBASIC}}== |
||
<lang freebasic>#define floor(x) ((x*2.0-0.5)Shr 1) |
<lang freebasic>#define floor(x) ((x*2.0-0.5)Shr 1) |