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
) {
// hotspotうぉーみんぐあっぷ
for (int i = 0; i < 2; i++) { result(findX(5)); }
long s
= System.
currentTimeMillis(); String result4
= result
(findX
(4)); String result5
= result
(findX
(5)); long e
= System.
currentTimeMillis(); System.
out.
printf("%s%n%s%n%,dms%n", result4, result5, e
- s
); }
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[32768];
int cur = 0;
for (int i = 511; i <= 2097151; i+= 512)
{
if (i >= n.length)
{
n
= Arrays.
copyOf(n, n.
length * 2); }
while(cur < i)
{
n[cur] = cur - 1;
cur++;
}
map.clear();
result.clear();
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();
}
}
aW1wb3J0IGphdmEudXRpbC4qOwogCi8vIOODl+ODreOCsOODqeODn+ODs+OCsOOBruOBiumhjOOCueODrCBQYXJ0MTQgCi8vIG1ldml1cy41Y2gubmV0L3Rlc3QvcmVhZC5jZ2kvdGVjaC8xNTU4MTY4NDA5LzM4OAovLyAzODgg5ZCN5YmN77yaIOKXhlFaYXc1NWNuNGMgW3NhZ2VdIOaKleeov+aXpe+8mjIwMTkvMDYvMTYo5pelKSAxNzo1ODoyNy4yNCBJRDpnREhLZnNCNiBbMS8zXQovLyDjgYrpoYzvvJoKLy8gYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgeCDjga/mraPjga7mlbTmlbDjgacKLy8gYV4zIC0gYl4zID0gY14zIC0gZF4zID0gZV4zIC0gZl4zID0gZ14zIC0gaF4zID0gaV4zIC0gal4zID0geAovLyDjgpLmuoDjgZ/jgZnvvI4KLy8g5p2h5Lu244KS5rqA44Gf44GZ5pyA5bCPeCDjgajlr77lv5zjgZnjgosgYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiDjgpLmsYLjgoHjgogKLy8gCi8vIDM5NyDlkI3liY3vvJog4peGUVphdzU1Y240YyBbc2FnZV0g5oqV56i/5pel77yaMjAxOS8wNi8xNijml6UpIDIyOjE1OjAxLjQyIElEOmdESEtmc0I2IFsyLzNdCi8vID4+Mzg4Ci8vIOadoeS7tuOCkui/veWKoOOBl+OBvuOBmeOAgWEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGog44Gv5LqS44GE44Gr55Ww44Gq44KL5q2j44Gu5pW05pWw44Gn44GZCi8vIOippueul+OBp+OBrwovLyB4ID0gMTQxMjc3NDgxMQovLyDjgavjgarjgorjgb7jgZfjgZ8KIApjbGFzcyBJZGVvbmUKewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgIHsKICAgIAkvLyBob3RzcG9044GG44GJ44O844G/44KT44GQ44GC44Gj44G3CiAgICAJZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsgcmVzdWx0KGZpbmRYKDUpKTsgfQogICAgCQogICAgCWxvbmcgcyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgCVN0cmluZyByZXN1bHQ0ID0gcmVzdWx0KGZpbmRYKDQpKTsKICAgIAlTdHJpbmcgcmVzdWx0NSA9IHJlc3VsdChmaW5kWCg1KSk7CiAgICAgICAgbG9uZyBlID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiVzJW4lcyVuJSxkbXMlbiIsIHJlc3VsdDQsIHJlc3VsdDUsIGUgLSBzKTsKICAgIH0KIAogICAgc3RhdGljIGxvbmcgY2FsYyhpbnQgYSwgaW50IGIpCiAgICB7CiAgICAgICAgcmV0dXJuIChsb25nKSBhICogYSAqIGEgLSAobG9uZykgYiAqIGIgKiBiOwogICAgfQogCiAgICBzdGF0aWMgbG9uZyBmaW5kWChpbnQgbnVtKQogICAgewogICAgICAgIEhhc2hNYXA8TG9uZywgSW50ZWdlcj4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgIFRyZWVTZXQ8TG9uZz4gcmVzdWx0ID0gbmV3IFRyZWVTZXQ8PigpOwogICAgICAgIGludFtdIG4gPSBuZXcgaW50WzMyNzY4XTsKICAgICAgICBpbnQgY3VyID0gMDsKIAogICAgICAgIGZvciAoaW50IGkgPSA1MTE7IGkgPD0gMjA5NzE1MTsgaSs9IDUxMikKICAgICAgICB7CiAgICAgICAgICAgIGlmIChpID49IG4ubGVuZ3RoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuID0gQXJyYXlzLmNvcHlPZihuLCBuLmxlbmd0aCAqIDIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB3aGlsZShjdXIgPCBpKQogICAgICAgICAgICB7CiAgICAgICAgICAgIAluW2N1cl0gPSBjdXIgLSAxOwogICAgICAgICAgICAJY3VyKys7CiAgICAgICAgICAgIH0KIAogICAgICAgIAltYXAuY2xlYXIoKTsKICAgICAgICAJcmVzdWx0LmNsZWFyKCk7CiAKICAgICAgICAgICAgbG9uZyBtYXggPSBjYWxjKGksIGkgLSAxKTsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDI7IGogPD0gaTsgaisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB3aGlsZSAobltqXSA+IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbG9uZyB4ID0gY2FsYyhqLCBuW2pdKTsKICAgICAgICAgICAgICAgICAgICBpZiAoeCA+IG1heCkgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gbWFwLmNvbXB1dGUoeCwgKGssIHYpIC0+IHYgPT0gbnVsbCA/IDEgOiB2ICsgMSk7CiAKICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gbnVtKSByZXN1bHQuYWRkKHgpOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID4gbnVtKSByZXN1bHQucmVtb3ZlKHgpOwogCiAgICAgICAgICAgICAgICAgICAgbltqXS0tOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAKICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKSByZXR1cm4gcmVzdWx0LmZpcnN0KCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH0KIAogICAgc3RhdGljIFN0cmluZyByZXN1bHQobG9uZyB4KQogICAgewogICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICBmb3IgKGludCBpID0gMjsgY2FsYyhpLCBpIC0gMSkgPD0geDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGogPSBpIC0gMTsKICAgICAgICAgICAgd2hpbGUoaiA+IDAgJiYgY2FsYyhpLCBqKSA8IHgpIGotLTsKICAgICAgICAgICAgaWYgKGNhbGMoaSwgaikgPT0geCkgcmVzdWx0LmFwcGVuZChpKS5hcHBlbmQoIl4zLSIpLmFwcGVuZChqKS5hcHBlbmQoIl4zID0gIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKHgpLnRvU3RyaW5nKCk7CiAgICB9Cn0=