D -cubes
题目链接:https://atcoder.jp/contests/abc397/tasks/abc397_d
题意:
求出正整数对(x,y)对于给定的n=x*x*x-y*y*y;
思路:
因氏分解,将给定式子转化为(x-y)(x*x+x*y+y*y)
发现这两个因式都为n的因数
不妨令左边一项等于a,右边一项等于b
易知:b>=(x-y)^2 => b>=a^2
n= a*b>=a^3
所以a在n的立方根里枚举(n最大取1e18)
时间复杂度可行
然后解方程+求根公式
注意每次运算都要保证是整数
对于证明开方数为整数:sq=sqrt(n)
只要sq*sq=n,开方即为整数,可以往下运算
int x,y;
int a,b;
void solve(){
int n;cin>>n;
for(int i=1;i*i*i<=n;i++){
if(n%i!=0)continue;
a=i;
b=n/a;
if(b<a*a)continue;
if((b-a*a)%3!=0)continue;
int c=(b-a*a)/3;
int d=a*a+4*c;
int sq=sqrt(d);
if(sq*sq!=d||(-a+sq)%2!=0)continue;
y=(-a+sq)/2;x=y+a;
}
if(x<=0||y<=0){
cout<<-1<<endl;
}else cout<<x<<' '<<y<<endl;
}

浙公网安备 33010602011771号