/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
int n = 500;
System.
out.
println(n
+ "個以上の約数を持つ最初の三角数は" + func
(n
)); }
public static int func(int num) {
// 2番目の三角数2*3/2=3に対応する、low:2/2=1の約数の個数1、high:3の約数の個数2
int low = 1;
int high = 2;
int n = 2;
while (low * high < num) {
n++;
low = high;
high = numOfDivisor(n + 1);
}
return n * (n + 1) / 2;
}
private static int numOfDivisor(int n) {
if (n < 2) return 1;
int answer = 1;
// 偶数だった場合は2で割る(ビットシフト)
if ((n & 1) == 0)
n >>= 1;
// nが√Integer.MAX_VALUE以上の素数だったりすると、この継続条件は良くないが、
// 簡単なのでこちらで進める
for (int i = 2; i * i <= n; i++) {
int count = 0;
while (n % i == 0) {
n /= i;
count++;
}
answer *= count + 1;
}
// forを抜けて残ったnが1でないときは、そのnは素数なので1+1=2を掛ける
if (n != 1)
answer *= 2;
return answer;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCWludCBuID0gNTAwOwoJCVN5c3RlbS5vdXQucHJpbnRsbihuICsgIuWAi+S7peS4iuOBrue0hOaVsOOCkuaMgeOBpOacgOWIneOBruS4ieinkuaVsOOBryIgKyBmdW5jKG4pKTsKCX0KCQoJcHVibGljIHN0YXRpYyBpbnQgZnVuYyhpbnQgbnVtKSB7CgkJLy8gMueVquebruOBruS4ieinkuaVsDIqMy8yPTPjgavlr77lv5zjgZnjgovjgIFsb3c6Mi8yPTHjga7ntITmlbDjga7lgIvmlbAx44CBaGlnaDoz44Gu57SE5pWw44Gu5YCL5pWwMgoJCWludCBsb3cgPSAxOwoJICAgIGludCBoaWdoID0gMjsKCSAgICBpbnQgbiA9IDI7CgkgICAgd2hpbGUgKGxvdyAqIGhpZ2ggPCBudW0pIHsKCSAgICAgICAgbisrOwoJICAgICAgICBsb3cgPSBoaWdoOwoJICAgICAgICBoaWdoID0gbnVtT2ZEaXZpc29yKG4gKyAxKTsKCSAgICB9CgkgICAgcmV0dXJuIG4gKiAobiArIDEpIC8gMjsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgaW50IG51bU9mRGl2aXNvcihpbnQgbikgewoJICAgIGlmIChuIDwgMikgcmV0dXJuIDE7CgkgICAgaW50IGFuc3dlciA9IDE7CgkKCSAgICAvLyDlgbbmlbDjgaDjgaPjgZ/loLTlkIjjga8y44Gn5Ymy44KLKOODk+ODg+ODiOOCt+ODleODiCkKCSAgICBpZiAoKG4gJiAxKSAgPT0gMCkKCSAgICAgICAgbiA+Pj0gMTsKCQoJICAgIC8vIG7jgYziiJpJbnRlZ2VyLk1BWF9WQUxVReS7peS4iuOBrue0oOaVsOOBoOOBo+OBn+OCiuOBmeOCi+OBqOOAgeOBk+OBrue2mee2muadoeS7tuOBr+iJr+OBj+OBquOBhOOBjOOAgQoJICAgIC8vIOewoeWNmOOBquOBruOBp+OBk+OBoeOCieOBp+mAsuOCgeOCiwoJICAgIGZvciAoaW50IGkgPSAyOyBpICogaSA8PSBuOyBpKyspIHsKCSAgICAgICAgaW50IGNvdW50ID0gMDsKCSAgICAgICAgd2hpbGUgKG4gJSBpID09IDApIHsKCSAgICAgICAgICAgIG4gLz0gaTsKCSAgICAgICAgICAgIGNvdW50Kys7CgkgICAgICAgIH0KCSAgICAgICAgYW5zd2VyICo9IGNvdW50ICsgMTsKCSAgICB9CgkgICAgLy8gZm9y44KS5oqc44GR44Gm5q6L44Gj44GfbuOBjDHjgafjgarjgYTjgajjgY3jga/jgIHjgZ3jga5u44Gv57Sg5pWw44Gq44Gu44GnMSsxPTLjgpLmjpvjgZHjgosKCSAgICBpZiAobiAhPSAxKQoJICAgICAgICBhbnN3ZXIgKj0gMjsKCSAgICByZXR1cm4gYW5zd2VyOwoJfQp9