RosettaCodeData/Task/Curzon-numbers/PascalABC.NET/curzon-numbers.pas

28 lines
580 B
ObjectPascal

##
function isCurzon(n: integer; k: biginteger) := (Power(k, n) + 1) mod (k * n + 1) = 0;
function curzonnumbers(k: integer): sequence of integer;
begin
var n := 1;
while true do
begin
if iscurzon(n, k) then yield n;
n += 1;
end;
end;
foreach var k in |2, 4, 6, 8, 10| do
begin
var i := 1;
println('Curzonnumbers with base', k);
foreach var n in curzonnumbers(k) do
begin
Write(n:5);
if (i mod 10) = 0 then println;
if i = 50 then break;
i += 1;
end;
println('1000th Curzon number', curzonnumbers(k).Skip(999).First);
println;
end;