35 lines
651 B
ObjectPascal
35 lines
651 B
ObjectPascal
function jacobi(n, k: integer): integer;
|
|
begin
|
|
assert((k > 0) and (k mod 2 = 1));
|
|
n := n mod k;
|
|
result := 1;
|
|
while n <> 0 do
|
|
begin
|
|
while n mod 2 = 0 do
|
|
begin
|
|
n := n shr 1;
|
|
if (k and 7) in [3, 5] then
|
|
result := -result;
|
|
end;
|
|
swap(n, k);
|
|
if ((n and 3) = 3) and ((k and 3) = 3) then
|
|
result := -result;
|
|
n := n mod k;
|
|
end;
|
|
if k <> 1 then result := 0;
|
|
end;
|
|
|
|
begin
|
|
write('n/k|');
|
|
for var n := 1 to 20 do write(n:3);
|
|
writeln(#10, '—' * 64);
|
|
|
|
for var k := 1 to 21 step 2 do
|
|
begin
|
|
write(k:2, ' |');
|
|
for var n := 1 to 20 do
|
|
write(jacobi(n, k):3);
|
|
writeln;
|
|
end;
|
|
end.
|