RosettaCodeData/Task/Extensible-prime-generator/M2000-Interpreter/extensible-prime-generator-2.m2000
2023-07-01 13:44:08 -04:00

23 lines
750 B
Text

PrimeNth=lambda Known, Known1 (n as long) -> {
if n<1 then Error "Only >=1"
if exist(known, n) then =eval(known) : exit
if n>5 then {
i=len(known1)
x=eval(known1, i-1)+2
} else x=5 : i=2
{
if i=n then =known(n) : exit
if frac(x) then 999
if frac(x/2) else 999
if frac(x/3) else 999
x1=sqrt(x) : d=5@
{if frac(x/d ) else 999
d += 2: if d>x1 then 1000
if frac(x/d) else 999
d += 4: if d<= x1 else 1000
loop
}
999 x++ : Restart
1000 i++:Append Known, i:=x : if not exist(Known1, x) then Append Known1, x
x++ : Loop }
}