import java.util.*;
// プログラミングのお題スレ Part14
// mevius.5ch.net/test/read.cgi/tech/1558168409/388
// 388 名前: ◆QZaw55cn4c [sage] 投稿日:2019/06/16(日) 17:58:27.24 ID:gDHKfsB6 [1/3]
// お題:
// a, b, c, d, e, f, g, h, i, j, x は正の整数で
// a^3 - b^3 = c^3 - d^3 = e^3 - f^3 = g^3 - h^3 = i^3 - j^3 = x
// を満たす.
// 条件を満たす最小x と対応する a, b, c, d, e, f, g, h, i, j を求めよ
//
// 397 名前: ◆QZaw55cn4c [sage] 投稿日:2019/06/16(日) 22:15:01.42 ID:gDHKfsB6 [2/3]
// >>388
// 条件を追加します、a, b, c, d, e, f, g, h, i, j は互いに異なる正の整数です
// 試算では
// x = 1412774811
// になりました
class Ideone
{
public static void main
(String[] args
) {
System.
out.
println(result
(findX
(4))); System.
out.
println(result
(findX
(5))); }
static long calc(int a, int b)
{
return (long) a * a * a - (long) b * b * b;
}
static long findX(int num)
{
HashMap
<Long, Integer
> map
= new HashMap
<>(); TreeSet<Long> result = new TreeSet<>();
int[] n = new int[64];
for (int i = 2; i <= 2097151; i++)
{
if (n.length <= i)
n
= Arrays.
copyOf(n, n.
length * 2);
map.clear();
result.clear();
n[i] = i - 1;
long max = calc(i, i - 1);
for (int j = 2; j <= i; j++)
{
while (n[j] > 0)
{
long x = calc(j, n[j]);
if (x > max) break;
int count = map.compute(x, (k, v) -> v == null ? 1 : v + 1);
if (count == num) result.add(x);
else if (count > num) result.remove(x);
n[j]--;
}
}
if (!result.isEmpty()) return result.first();
}
return -1;
}
{
StringBuilder result = new StringBuilder();
for (int i = 2; calc(i, i - 1) <= x; i++)
{
int j = i - 1;
while(j > 0 && calc(i, j) < x) j--;
if (calc(i, j) == x) result.append(i).append("^3-").append(j).append("^3 = ");
}
return result.append(x).toString();
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKLy8g44OX44Ot44Kw44Op44Of44Oz44Kw44Gu44GK6aGM44K544OsIFBhcnQxNCAKLy8gbWV2aXVzLjVjaC5uZXQvdGVzdC9yZWFkLmNnaS90ZWNoLzE1NTgxNjg0MDkvMzg4Ci8vIDM4OCDlkI3liY3vvJog4peGUVphdzU1Y240YyBbc2FnZV0g5oqV56i/5pel77yaMjAxOS8wNi8xNijml6UpIDE3OjU4OjI3LjI0IElEOmdESEtmc0I2IFsxLzNdCi8vIOOBiumhjO+8mgovLyBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCB4IOOBr+ato+OBruaVtOaVsOOBpwovLyBhXjMgLSBiXjMgPSBjXjMgLSBkXjMgPSBlXjMgLSBmXjMgPSBnXjMgLSBoXjMgPSBpXjMgLSBqXjMgPSB4Ci8vIOOCkua6gOOBn+OBme+8jgovLyDmnaHku7bjgpLmuoDjgZ/jgZnmnIDlsI94IOOBqOWvvuW/nOOBmeOCiyBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqIOOCkuaxguOCgeOCiAovLyAKLy8gMzk3IOWQjeWJje+8miDil4ZRWmF3NTVjbjRjIFtzYWdlXSDmipXnqL/ml6XvvJoyMDE5LzA2LzE2KOaXpSkgMjI6MTU6MDEuNDIgSUQ6Z0RIS2ZzQjYgWzIvM10KLy8gPj4zODgKLy8g5p2h5Lu244KS6L+95Yqg44GX44G+44GZ44CBYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiDjga/kupLjgYTjgavnlbDjgarjgovmraPjga7mlbTmlbDjgafjgZkKLy8g6Kmm566X44Gn44GvCi8vIHggPSAxNDEyNzc0ODExCi8vIOOBq+OBquOCiuOBvuOBl+OBnwoKY2xhc3MgSWRlb25lCnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdChmaW5kWCg0KSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQoZmluZFgoNSkpKTsKICAgIH0KICAgIAogICAgc3RhdGljIGxvbmcgY2FsYyhpbnQgYSwgaW50IGIpCiAgICB7CiAgICAgICAgcmV0dXJuIChsb25nKSBhICogYSAqIGEgLSAobG9uZykgYiAqIGIgKiBiOwogICAgfQogICAgCiAgICBzdGF0aWMgbG9uZyBmaW5kWChpbnQgbnVtKQogICAgewogICAgICAgIEhhc2hNYXA8TG9uZywgSW50ZWdlcj4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgIFRyZWVTZXQ8TG9uZz4gcmVzdWx0ID0gbmV3IFRyZWVTZXQ8PigpOwogICAgICAgIGludFtdIG4gPSBuZXcgaW50WzY0XTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gMjA5NzE1MTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG4ubGVuZ3RoIDw9IGkpCiAgICAgICAgICAgICAgICBuID0gQXJyYXlzLmNvcHlPZihuLCBuLmxlbmd0aCAqIDIpOwogICAgICAgICAgICAKICAgICAgICAJbWFwLmNsZWFyKCk7CiAgICAgICAgCXJlc3VsdC5jbGVhcigpOwogICAgICAgICAgICAKICAgICAgICAgICAgbltpXSA9IGkgLSAxOwogICAgICAgICAgICBsb25nIG1heCA9IGNhbGMoaSwgaSAtIDEpOwogICAgICAgICAgICBmb3IgKGludCBqID0gMjsgaiA8PSBpOyBqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHdoaWxlIChuW2pdID4gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBsb25nIHggPSBjYWxjKGosIG5bal0pOwogICAgICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4KSBicmVhazsKICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSBtYXAuY29tcHV0ZSh4LCAoaywgdikgLT4gdiA9PSBudWxsID8gMSA6IHYgKyAxKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gbnVtKSByZXN1bHQuYWRkKHgpOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID4gbnVtKSByZXN1bHQucmVtb3ZlKHgpOwoKICAgICAgICAgICAgICAgICAgICBuW2pdLS07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkgcmV0dXJuIHJlc3VsdC5maXJzdCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9CiAgICAKICAgIHN0YXRpYyBTdHJpbmcgcmVzdWx0KGxvbmcgeCkKICAgIHsKICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDI7IGNhbGMoaSwgaSAtIDEpIDw9IHg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGludCBqID0gaSAtIDE7CiAgICAgICAgICAgIHdoaWxlKGogPiAwICYmIGNhbGMoaSwgaikgPCB4KSBqLS07CiAgICAgICAgICAgIGlmIChjYWxjKGksIGopID09IHgpIHJlc3VsdC5hcHBlbmQoaSkuYXBwZW5kKCJeMy0iKS5hcHBlbmQoaikuYXBwZW5kKCJeMyA9ICIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCh4KS50b1N0cmluZygpOwogICAgfQp9