RosettaCodeData/Task/Loops-Increment-loop-index-within-loop-body/SETL/loops-increment-loop-index-within-loop-body.setl
2025-06-11 20:16:52 -04:00

29 lines
832 B
Text

program primes42;
loop
init n := 42; p := 0;
step n +:= 1;
until p = 42 do
if prime(n) then
print(lpad(str(p +:= 1), 2) + ": " + lpad(commatize(n), 20));
n +:= n;
end if;
end loop;
proc prime(n);
if n<=4 then return n in [2,3]; end if;
if n mod 2=0 or n mod 3=0 then return False; end if;
loop init d := 5; while d*d <= n do
if n mod d=0 then return false; end if;
d +:= 2;
if n mod d=0 then return false; end if;
d +:= 4;
end loop;
return True;
end proc;
proc commatize(n);
if n<1000 then return str n; end if;
p := "00" + str(n mod 1000);
return commatize(n div 1000) + "," + p(#p-2..#p);
end proc;
end program;