60 lines
1 KiB
ObjectPascal
60 lines
1 KiB
ObjectPascal
uses clib;
|
|
|
|
var
|
|
n, i, j: int16;
|
|
m: int32 = 0;
|
|
a, b: array of int16;
|
|
|
|
procedure sort(l, h: int32);
|
|
var
|
|
i, j, k: int32;
|
|
tmp: int16;
|
|
begin
|
|
i := l;
|
|
j := h;
|
|
k := (l + h) div 2;
|
|
repeat
|
|
while a[i] * b[k] < a[k] * b[i] do
|
|
inc(i);
|
|
while a[j] * b[k] > a[k] * b[j] do
|
|
dec(j);
|
|
if i <= j then
|
|
begin
|
|
tmp := a[i];
|
|
a[i] := a[j];
|
|
a[j] := tmp;
|
|
tmp := b[i];
|
|
b[i] := b[j];
|
|
b[j] := tmp;
|
|
inc(i);
|
|
dec(j)
|
|
end
|
|
until i > j;
|
|
|
|
if l < j then
|
|
sort(l, j);
|
|
if i < h then
|
|
sort(i, h)
|
|
end;
|
|
|
|
begin
|
|
readln(n);
|
|
setlength(a, m);
|
|
setlength(b, m);
|
|
for i := 1 to n do
|
|
for j := 1 to n do
|
|
if gcd(i, j) = 1 then
|
|
begin
|
|
inc(m);
|
|
setlength(a, m);
|
|
a[m - 1] := i;
|
|
setlength(b, m);
|
|
b[m - 1] := j
|
|
end;
|
|
sort(0, m - 1);
|
|
writeln(m);
|
|
repeat
|
|
dec(m);
|
|
writeln(a[m], ' ', b[m])
|
|
until m = 0;
|
|
end.
|