63 lines
1.4 KiB
Plaintext
63 lines
1.4 KiB
Plaintext
|
con
|
||
|
_clkmode = $62
|
||
|
_clkfreq = $4E495053 ' SPIN
|
||
|
|
||
|
obj
|
||
|
c : "clibsd"
|
||
|
|
||
|
dat
|
||
|
primes long $00020001, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
|
long 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
|
long 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
|
long 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
|
long 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
|
long 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
|
long 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
|
long 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
|
long 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||
|
last long 0
|
||
|
|
||
|
pub main(argc, argv) | i, j, n, num, maxnum, count, prime
|
||
|
|
||
|
c.enter(argc, argv)
|
||
|
|
||
|
if argc <> 2
|
||
|
c.printf0(string("usage: prime max_number\n"))
|
||
|
c.exit(1)
|
||
|
|
||
|
maxnum := 0
|
||
|
i := long[argv][1]
|
||
|
repeat while byte[i]
|
||
|
maxnum := (maxnum * 10) + byte[i++] - "0"
|
||
|
|
||
|
c.printf1(string("%d "), 1)
|
||
|
c.printf1(string("%d "), 2)
|
||
|
|
||
|
num := (@last - @primes)/2
|
||
|
n := 2
|
||
|
i := 3
|
||
|
count := 2
|
||
|
repeat while i < maxnum
|
||
|
j := 2
|
||
|
repeat while j < n
|
||
|
prime := word[@primes][j]
|
||
|
if prime * prime > i
|
||
|
j := n
|
||
|
quit
|
||
|
if i / prime * prime == i
|
||
|
quit
|
||
|
j++
|
||
|
if j == n
|
||
|
if n < num
|
||
|
word[@primes][n++] := i
|
||
|
if n == num and i * i < maxnum
|
||
|
maxnum := i * i
|
||
|
c.printf1(string("%d "), i)
|
||
|
if ++count => 10
|
||
|
count := 0
|
||
|
c.printf0(string("\n"))
|
||
|
i += 2
|
||
|
if count
|
||
|
c.printf0(string("\n"))
|
||
|
c.exit(0)
|