//mevius.5ch.net/test/read.cgi/tech/1480579110/858
//与えられた自然数を高々四個の四角数(平方数)の和で表せ
import java.util.*;
import java.lang.*;
import java.io.*;
class Q9_858
{
public static void main
(String[] args
) {
try (Scanner in
= new Scanner
(System.
in)) {
while (in.hasNextInt())
{
System.
out.
println(calc
(in.
nextInt())); }
}
}
{
int sqrtN
= (int) Math.
sqrt(n
); if (sqrtN
* sqrtN
== n
) return String.
format("%d = %d^2", n, sqrtN
);
for (int i = 1; i <= sqrtN; i++)
{
int ii = i * i;
bs1.set(ii);
if (bs1.
get(n
- ii
)) return String.
format("%d = %d^2 + %d^2", n,
(int) Math.
sqrt(n
- ii
), i
);
for (int j
= 1, k
= (int) Math.
sqrt(n
- ii
); j
<= k
; j
++) {
int jj = j * j;
int p = ii + jj;
try
{
bs2.set(p);
{
System.
out.
println(ii
+ "," + jj
+ "," + p
); throw ioobe;
}
if (bs1.
get(n
- p
)) { return String.
format("%d = %d^2 + %d^2 + %d^2", n,
(int) Math.
sqrt(n
- p
), i, j
); } if (bs2.
get(n
- p
)) { return String.
format("%d = %s + %d^2 + %d^2", n, toString2
(bs1, n
- p
), i, j
); } }
}
}
{
for (int j = 1; j * j < i; j++)
{
if (bs.
get(i
- j
* j
)) return String.
format("%d^2 + %d^2", j,
(int) Math.
sqrt(i
- j
* j
)); }
}
}
Ly9tZXZpdXMuNWNoLm5ldC90ZXN0L3JlYWQuY2dpL3RlY2gvMTQ4MDU3OTExMC84NTgKLy/kuI7jgYjjgonjgozjgZ/oh6rnhLbmlbDjgpLpq5jjgIXlm5vlgIvjga7lm5vop5LmlbAo5bmz5pa55pWwKeOBruWSjOOBp+ihqOOBmwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBROV84NTgKewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgIHsKICAgICAgICB0cnkgKFNjYW5uZXIgaW4gPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pKQogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKGluLmhhc05leHRJbnQoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNhbGMoaW4ubmV4dEludCgpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIFN0cmluZyBjYWxjKGludCBuKQogICAgewogICAgICAgIGludCBzcXJ0TiA9IChpbnQpIE1hdGguc3FydChuKTsKICAgICAgICBpZiAoc3FydE4gKiBzcXJ0TiA9PSBuKSByZXR1cm4gU3RyaW5nLmZvcm1hdCgiJWQgPSAlZF4yIiwgbiwgc3FydE4pOwoKICAgICAgICBCaXRTZXQgYnMxID0gbmV3IEJpdFNldCgpOwogICAgICAgIEJpdFNldCBiczIgPSBuZXcgQml0U2V0KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gc3FydE47IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGludCBpaSA9IGkgKiBpOwogICAgICAgICAgICBiczEuc2V0KGlpKTsKICAgICAgICAgICAgaWYgKGJzMS5nZXQobiAtIGlpKSkgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiVkID0gJWReMiArICVkXjIiLCBuLCAoaW50KSBNYXRoLnNxcnQobiAtIGlpKSwgaSk7CgogICAgICAgICAgICBmb3IgKGludCBqID0gMSwgayA9IChpbnQpIE1hdGguc3FydChuIC0gaWkpOyBqIDw9IGs7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGpqID0gaiAqIGo7CiAgICAgICAgICAgICAgICBpbnQgcCA9IGlpICsgamo7CiAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBiczIuc2V0KHApOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpb29iZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaWkgKyAiLCIgKyBqaiArICIsIiArIHApOwogICAgICAgICAgICAgICAgICAgIHRocm93IGlvb2JlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGJzMS5nZXQobiAtIHApKSB7IHJldHVybiBTdHJpbmcuZm9ybWF0KCIlZCA9ICVkXjIgKyAlZF4yICsgJWReMiIsIG4sIChpbnQpIE1hdGguc3FydChuIC0gcCksIGksIGopOyB9CiAgICAgICAgICAgICAgICBpZiAoYnMyLmdldChuIC0gcCkpIHsgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiVkID0gJXMgKyAlZF4yICsgJWReMiIsIG4sIHRvU3RyaW5nMihiczEsIG4gLSBwKSwgaSwgaik7IH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcyKEJpdFNldCBicywgaW50IGkpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogKiBqIDwgaTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGJzLmdldChpIC0gaiAqIGopKSByZXR1cm4gU3RyaW5nLmZvcm1hdCgiJWReMiArICVkXjIiLCBqLCAoaW50KSBNYXRoLnNxcnQoaSAtIGogKiBqKSk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CiAgICB9Cn0K