diff options
author | Raphael McSinyx <vn.mcsinyx@gmail.com> | 2017-02-21 21:09:39 +0700 |
---|---|---|
committer | Raphael McSinyx <vn.mcsinyx@gmail.com> | 2017-02-21 21:09:39 +0700 |
commit | 7d19f480637e9e880b98dabfbcf8e885b0a2d3b9 (patch) | |
tree | fa52914a2e58bc13570839fa297be05b7b7616bf /others/volume1/078.pas | |
parent | f2d4bc6b7c302dee2d84a3acf84b83b5a98c45fa (diff) | |
download | cp-7d19f480637e9e880b98dabfbcf8e885b0a2d3b9.tar.gz |
Update others/volume1
Diffstat (limited to 'others/volume1/078.pas')
-rw-r--r-- | others/volume1/078.pas | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/others/volume1/078.pas b/others/volume1/078.pas new file mode 100644 index 0000000..a202c6a --- /dev/null +++ b/others/volume1/078.pas @@ -0,0 +1,60 @@ +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. |