Skip to content

AtCoder Beginner Contest 397

D

x3y3=N

d=xy

x3y3=(y+d)3y3=y3+3d2y+3dy2+d3y3

N=3d2+3dy+3y2

枚举 d 然后二分找出 y

cpp
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