https://atcoder.jp/contests/abc397/tasks/abc397_dhttps://atcoder.jp/contests/abc397/tasks/abc397_d
题目描述:
确定是否存在一对正整数
,使得
思路:
首先对方程进行转化
设
即
接下来确定的范围
根据立方差公式
因此,我们可以从到
来逐个枚举
此时 方程的就变成了常数
设 ,
,
原方程变为
这时,只需要解一下这个二次方程就可以了
提醒:
会爆long long
所以要开__int128
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
signed main(){cin>>n;for(int i=1;i*i*i<=n;i++){int a=3*i,b=-3*i*i,c=i*i*i-n;__int128 u=b,v=a;u=u*u-4*v*c;__int128 k=sqrtl(u);if(k*k==u){int xa=(-b+k),xb=(-b-k);if(xa>0&&xa%(2*a)==0&&xa/2/a-i>0){xa/=(2*a);cout<<xa<<" "<<xa-i;return 0;}if(xb>0&&xb%(2*a)==0&&(xb/2/a)-i>0){xb/=(2*a);cout<<xb<<" "<<xb-i;return 0;}}}cout<<"-1";return 0;
}