AtCoder Beginner Contest 397¶
D¶
\(x^3-y^3=N\)
\(d=x-y\)
则 \(x^3-y^3=(y+d)^3-y^3=y^3+3d^2y+3dy^2+d^3-y^3\)
\(N=3d^2+3dy+3y^2\)
枚举 \(d\) 然后二分找出 \(y\) 。
void ChatGptDeepSeek()
{
ll n;
cin >> n;
/*
(y+d)*(y+d)*(y+d)-y*y*y=n
(yyy+3dyy+3ddy+ddd)-yyy=n
3dyy+3ddy+ddd=n
3yy+3dy+dd=n/d
*/
auto calc = [&](ll d) {
ll lo = 0, hi = 1e9 + 1;
while (lo < hi - 1) {
ll mid = (lo + hi) >> 1;
if (3 * mid * mid + 3 * mid * d + d * d <= n / d)
lo = mid;
else
hi = mid;
}
// cerr << d << " " << hi << '\n';
if (3 * lo * lo + 3 * lo * d + d * d == n / d)
return lo;
return 0LL;
};
for (ll d = 1; d * d * d <= n; d++) {
if (n % d == 0) {
ll res = calc(d);
if (res) {
cout << res + d << " " << res << '\n';
return;
}
}
}
cout << "-1\n";
} // 100 100 100