Circular primes: Difference between revisions
Content added Content deleted
(Added Algol 68) |
(Forth version) |
||
Line 671: | Line 671: | ||
</pre> |
</pre> |
||
=={{header|Forth}}== |
|||
Forth only supports native sized integers, so we only implement the first part of the task. |
|||
<lang Forth> |
|||
create 235-wheel 6 c, 4 c, 2 c, 4 c, 2 c, 4 c, 6 c, 2 c, |
|||
does> swap 7 and + c@ ; |
|||
0 1 2constant init-235 \ roll 235 wheel at position 1 |
|||
: next-235 over 235-wheel + swap 1+ swap ; |
|||
\ check that n is prime excepting multiples of 2, 3, 5. |
|||
: sq dup * ; |
|||
: wheel-prime? ( n -- f ) |
|||
>r init-235 begin |
|||
next-235 |
|||
dup sq r@ > if rdrop 2drop true exit then |
|||
r@ over mod 0= if rdrop 2drop false exit then |
|||
again ; |
|||
: prime? ( n -- f ) |
|||
dup 2 < |
|||
if drop false |
|||
else |
|||
dup 1 and 0= |
|||
if 2 = |
|||
else dup 3 mod 0= |
|||
if 3 = |
|||
else dup 5 mod 0= |
|||
if 5 = |
|||
else wheel-prime? |
|||
then |
|||
then |
|||
then |
|||
then ; |
|||
: log10^ ( n -- 10^[log n], log n ) |
|||
dup 0<= abort" log10^: argument error." |
|||
1 0 rot |
|||
begin dup 9 > while |
|||
swap 1+ swap rot 10 * -rot 10 / |
|||
repeat drop ; |
|||
: log10 ( n -- n ) log10^ nip ; |
|||
: rotate ( n -- n ) |
|||
dup log10^ drop /mod swap 10 * + ; |
|||
: circular? ( n -- f ) \ assume n is not a multiple of 2, 3, 5 |
|||
dup wheel-prime? invert |
|||
if drop false exit |
|||
then dup >r \ save original value for comparison |
|||
dup log10 swap begin over 0> while |
|||
rotate dup r@ < over prime? invert or if |
|||
2drop rdrop false exit |
|||
then swap 1- swap |
|||
repeat 2drop rdrop true ; |
|||
: .primes |
|||
2 . 3 . 5 . |
|||
16 init-235 \ -- count, [n1 n2] as 2,3,5 wheel |
|||
begin |
|||
next-235 dup circular? |
|||
if dup . rot 1- -rot |
|||
then |
|||
third 0= until 2drop drop ; |
|||
." The first 19 circular primes are:" cr .primes cr |
|||
bye |
|||
</lang> |
|||
{{Out}} |
|||
<pre> |
|||
The first 19 circular primes are: |
|||
2 3 5 7 11 13 17 37 79 113 197 199 337 1193 3779 11939 19937 193939 199933 |
|||
</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) |
||
Line 708: | Line 781: | ||
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|Go}}== |
=={{header|Go}}== |