2009年4月 的存档

C语言验证 哥德巴赫猜想

验证哥德巴赫猜想:任一充分大的偶数,可以用两个素数之和表示,例如:
4 = 2 + 2
6 = 3 + 3
..
9 8 = 1 9 + 7 9

分析:我们先不考虑怎样判断一个数是否为素数,而从整体上对这个问题进行考虑,可以这样做:读入一个偶数n,将它分成p和q,使n = p + q。怎样分呢?可以令p从2开始,每次加1,而令q = n – p,如果p、q均为素数,则正为所求,否则令p = p + q再试。
参考程序:

#include
 
#include 
int main( )
{
  long int j,n,p,q,flagp,flagq;
  printf("please input n :\n");
  scanf("%ld",&n );
  if (((n%2)!=0)||(n<=4))
    printf("input data error!\n");
  else
   {
     p = 1 ;
     do {
          p = p + 1 ;
          q = n - p ;
          flagp = 1 ;
          for(j=2;j<=(int)(sqrt(p));j++)    /*判断p是否为素数*/
            {
               if ((p%j)==0)
               {
                 flagp = 0 ;
                 break;       /*不是素数,退出循环*/
                }
              }
         flagq=1 ;
         for(j=2;j<=(int)(sqrt(q));j++)   /*判断q是否为素数*/
 
           {
             if ((q%j)==0)
             {
               flagq = 0 ;
               break ;  /*不是素数,退出循环*/
              }
           }
     } while(flagp*flagq==0);
   printf("%d = %d + %d \n",n,p,q);
  }
}