又又又不是一道二分…思维+
s
t
l
stl
stl运用
题目链接
给你一个正整数 x x x,请检查数字 x x x 是否可以表示为两个正整数 a , b a,b a,b的立方之和。
我们用
s
e
t
set
set保存每一个可能的
a
3
a^3
a3,遍历找
b
3
b^3
b3,如果
b
b
b存在且为正整数,则输出对
本题只要求查找,我们可以用
u
n
o
r
d
e
r
e
d
unordered
unordered_
s
e
t
set
set,更快
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll M = 1e12;
unordered_set<ll>mp;
void init()
{
for (ll i = 1;i * i * i <= M;i++) {
mp.insert(i * i * i);
}
}
void solve()
{
ll x;cin >> x;
for (ll i = 1;i * i * i <= x;i++) {
if (mp.count(x - i * i * i)) {
cout << "YES" << '\n';
return;
}
}
cout << "NO" << '\n';
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t;cin >> t;
init();
while (t--) {
solve();
}
return 0;
}