跳转至

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