#include
int main()
{ int n,x,i,j;
scanf("%d",&n);
while(n--)
{scanf("%d",&x);
if(x<0)
{printf("No\n");
continue;
}
for(i=1;i*i*i<=x;i++);
--i;
x-=i*i*i;
for(j=1;j*j*j<=x;j++);
--j;
x-=j*j*j;
printf("%s\n",x?"No\n":"Yes\n");
}
return 0;
}
#include
楼上的都是不看题目的吗,写个判断质数的代码干嘛???
你这题,使用循环也能做,但是需要O(n)的时间,如果运用一点数学方法,就是解方程的问题,只需O(1)时间
设要判断的质数为p,由题意p=a^3-b^3=(a-b)(a^2+b^2+ab),要使得p是质数,那么必定有a-b等于1,故p=(a-b)^2+3ab=1+3ab=1+3(b+1)b,即有p=3b²+3b+1
那么问题就化为二元一次方程 3b²+3b+(1-p)=0 是否有正整数解了
由求根公式得 b=(-0.5)+sqrt(12*p-3)/6,那么判断这个式子的值是否是整数就行了
bool Check(const unsigned p) // p为待判断的质数
{
double delte = sqrt(12*p-3);
if( (int)delte != delte ) // △不为整数,根必定不为整数
return false;
double b = (-0.5) + sqrt(12*p-3)/6.0; // 求根
if( (int)b == b) // 判断是否为整数
return true;
return false;
}