39 lines
611 B
Forth
39 lines
611 B
Forth
|
( Forth version of a Prime Number Finder
|
||
|
haplo@mindstab.net )
|
||
|
|
||
|
: check ( m cnt -- b )
|
||
|
{ m cnt }
|
||
|
\ var i
|
||
|
-1 3 -1
|
||
|
begin
|
||
|
over m <= and while
|
||
|
nip
|
||
|
dup 2 + swap cnt swap mod tuck ( # cnt+2 # )
|
||
|
repeat
|
||
|
drop
|
||
|
;
|
||
|
|
||
|
: primes ( m sq sqm -- )
|
||
|
{ m sq sqm }
|
||
|
\ var i sq sqm
|
||
|
sqm sq 3
|
||
|
begin
|
||
|
dup m <= while
|
||
|
over over \ sq(max) cnt
|
||
|
check ( max cnt -- b )
|
||
|
if dup . CR then
|
||
|
2 +
|
||
|
rot ( sq cnt sqm ) over over
|
||
|
> if
|
||
|
rot ( cnt sqm sq )
|
||
|
1 + nip ( cnt sq )
|
||
|
dup dup * ( cnt sq sqm )
|
||
|
rot swap ( sq cnt sqm )
|
||
|
then
|
||
|
\ sqm sq 3
|
||
|
rot rot
|
||
|
repeat
|
||
|
drop drop drop
|
||
|
;
|
||
|
|