哥德巴赫猜想(适合小数据)

哥德巴赫猜想:一个不小于6的偶数,总能分解成两个质数之和。

#include(stdio.h)

#include(math.h)

boolean   isPrime(int  num);

boolean   isGoldbachConjecture(int  arrange);

boolean   GoldbachConjecture(int  arrange){

     boolean   isGoldbachRight;

     boolean   found;

     int   num;

     int   i;

        for(num = 6,isGoldbachRight =1;isGoldbachRight&&num<=arrange;num+=2){

       //例如:6=3+3;

                 //24=3+(24-3);

                 //24=5+(24-5);

                 //24=7+(24-7);

                //24=9+(24-9);

        //这是下面这个循环的手工过程。

       for(i=3,found=-1;!found&&i<=num/2;i+=2){

            if(isPrime(i)&&isPrime(num-i)){

            found=1;

            }

}

      if(!found){

          isGoldbachRight = -1;

          printf("%d\n",num);

          }

}

      return   isGoldbachRight;

}

boolean   isPrime(int  num){     //判断是否是质数

      int i;

      int   maxNum = (int)(sqrt(num));

      if(num>2&&num%2 == 0){

         return  -1;

      }

      for(i=3;i<maxNum&&num%i;i+=2){

       }

    return  i>maxNum;

    }

   int main(){

       int  num;

       printf("请输入范围:");

       scanf("%d",&num);

       if(GoldbachConjecture(num)==-1){

         printf("哥德巴赫猜想错了!");

        }esle{

          printf("哥德巴赫猜想从6到%d是正确的\n",num);

        }

      return 0;

      }

但是这个程序对于7位数以上的数据,会非常耗时!!!后续更新更好的算法!!!

猜你喜欢

转载自www.cnblogs.com/youdiaodaxue16/p/9122079.html