1. 程式人生 > 其它 >CF1490C Sum of Cubes 【暴搜】

CF1490C Sum of Cubes 【暴搜】

Codeforces 1490C -> Click Here

題意

求數 \(x\) 是否滿足 \(a^3+b^3=x\)\(a\),\(b\)為任意兩個正整數

思路

直接暴力搜尋,先把 \(1\)\(10000\) 的立方 \(a^3\)​ 存起來再遍歷此陣列,求出\(x\)\(a^3\) 的差,判斷差是否為某個數的立方

(求某個數的三次方可用 <cmath> 中的 cbrt 函式,算是觸及到我的知識盲區了,視力問題,沒看見要開long long直接將我卡飛

code

#include<iostream>
#include<cmath>
#define REP(i,a,b) for(ll i=(a);i<=(b);i++)
#define FOR(i,a,b) for(ll i=(a);i<(b);i++)
using namespace std;
typedef long long ll;
ll n;
ll A[10000],cnt=0;
bool pan(ll x){
	ll a=cbrt(x);
	if(a*a*a==x) return true;
	return false;
}
void solve(){
	cin>>n;
	for(ll i=1;i<=n;i++){
		ll x=A[i];
		if(n<=x) break;//如果a比x還大,那就直接break掉
		if(pan(n-x)){
			cout<<"YES\n";
			return;
		}
	}
	cout<<"NO"<<endl;
}
void init(){
	REP(i,1,10000) A[++cnt]=i*i*i;//把a的三次方存起來
}
int main(){
	init();
	int T;
	cin>>T;
	while(T--)
	solve();
	return 0;
}