题目来源
做题思路:
首先可以看到给的时间挺长的,我们就想到了暴力法,第一次暴力直接TLE,10的12次方开三次根号是10000,如果进行遍历的话,也是需要O(n*n)的。所以需要用特别点的方法:我们枚举两个数中的一个,然后求出来b,然后判断a的3次方与强转成整数型的b开立方的立方的和是否为x。同时b也要满足大于0。
上代码!!
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
bool flag = false;
long long x;
cin>>x;
for(long long i =1;i*i*i<=x;i++){
long long b=x-i*i*i;
long long k = (int)(cbrt(b)); //cbrt开立方函数
if(i*i*i+b==x&&k*k*k==b&&b>0){
flag = true;
break;
}else continue;
}
if(flag == true){
cout<<"YES"<<endl;
}else cout<<"NO"<<endl;
}
return 0;
}