题面
题意
给你一个x,问是否存在 x = a3 + b3 ,输出 YES/NO
题解
- 注意数据范围x是1e12,那么a,b的范围就是1e4,枚举a,然后二分b ,二分条件就是 b3 = x - a3
- 当然还可以用双指针做,一直缩小范围就好
代码1(二分)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll t, x;
int main() {
cin >> t;
while (t--) {
cin >> x;
bool flag = false;
for (ll i = 1; i <= 10000; i++) {
if (i * i * i >= x) break;
ll res = x - i * i * i;
ll l = 1, r = 10000;
while (l < r) {
ll mid = (l + r) >> 1;
if (mid * mid * mid >= res) r=mid;
else l=mid+1;
}
if(l*l*l==res){
flag= true;
break;
}
}
if (flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
代码2(双指针)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll t, x;
int main() {
cin >> t;
while (t--) {
cin >> x;
bool flag = false;
for (ll i = 1, j = pow(x, 1.0 / 3)+9; i <= j; i++) {
while (i*i*i+j*j*j > x && j > 0) j--;
if (i*i*i+j*j*j == x && j != 0) {
flag = true;
break;
}
}
if (flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}