Circular primes: Difference between revisions

Forth version
(Added Algol 68)
(Forth version)
Line 671:
</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}}==
<lang freebasic>#define floor(x) ((x*2.0-0.5)Shr 1)
Line 708 ⟶ 781:
2 3 5 7 11 13 17 37 79 113 197 199 337 1193 3779 11939 19937 193939 199933
</pre>
 
 
=={{header|Go}}==
357

edits