c语言程序:编写函数,判断一个正整数是否可以写成两个正整数的立方和

2024-11-27 13:25:41
推荐回答(3个)
回答1:

#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;
}

回答2:

#include void fun(int n) { int i; for(i=2;i

回答3:


楼上的都是不看题目的吗,写个判断质数的代码干嘛???

你这题,使用循环也能做,但是需要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;
}