求一个质数能否写成两个立方数的差
,
是质数,两个因子的乘积只能是1和本身,又因为
,所以a-b=1;
所以a=b+1,所以,可以先判断
是否能整除3,再继续判断即可
#include<cstdio>
#include<cmath>
typedef long long ll;
int main(){
int t;
scanf("%d",&t);
while(t--){
ll p;
scanf("%lld",&p);
p-=1;
int flag=0;
if(p%3==0){
p/=3;
for(ll i=sqrt(p);i*(i+1)<=p;i++)
if(i*(i+1)==p)
flag=1;
if(flag)
printf("YES\n");
else
printf("NO\n");
}
else
printf("NO\n");
}
return 0;
}