题意:给定一个素数,判定它是不是两个立方数之差。
题解:对于a^3+b^3=(a-b)(a^2-a*b+b^2),而一个素数的因子只有1和其本身,在加上(a^2-a*b+b^2)一定是大于1的,所以只有(a-b)为1的时候,才可能为解。预处理一下,打个表就好了。
ac代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; ll ans[800000]; int mycheck(int l,int r,ll key) { while(r-l>10) { int mid=(l+r)/2; if(ans[mid] > key) { r=mid-1; } else if(ans[mid] < key) l=mid+1; else return 1; } // cout<<l<<‘ ‘<<r<<endl; for(int i=l;i<=r;i++) if(ans[i]==key) return 1; return -1; } int main() { int t; for(ll i=2;i<=800000;i++) { ans[i-1]=i*i*i-(i-1)*(i-1)*(i-1); // if(i<=10) cout<<ans[i-1]<<endl; } //cout<<ans[800000-1]<<endl; cin>>t; while(t--) { ll n; scanf("%lld",&n); int pos=mycheck(1,800000,n); if(pos==1) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
时间: 2024-12-19 23:26:10