C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

验证哥德巴赫猜想

Posted on 2006-03-26 01:00 我爱C 阅读(6883) 评论(8)  编辑 收藏 引用 所属分类: 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 <math.h>
#include <stdio.h>
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) ;
  }

Feedback

# re: 验证哥德巴赫猜想  回复  更多评论   

2006-05-28 11:00 by 真正的鳄鱼
这个程序写的很简洁,明了,强!

# re: 验证哥德巴赫猜想  回复  更多评论   

2006-10-12 21:04 by 李勇
#include <stdio.h>

int check(int n)//验证n是否为素数
{
if(n%2==0)
return 0;
for(int i=2;i<n/2;i++)
{
if(n%i==0)
return 0;
}
return 1;

}
void data(int n)
{ int a;
for(int i=2;i<(n/2)+1;i++)
{
a=n-i;
if(check(i)&&check(a))//i ,a 都为素数则输出
{
printf("%d %d %d\n",n,a,i);
break;
}
}

}
void main()
{
for(int i=4;i<=1234;i+=2)
data(i);


}

# re: 验证哥德巴赫猜想  回复  更多评论   

2006-10-19 18:01 by maildaty
flagp = 1 ;
for(j=2;j<=(int)(sqrt(p));j++) /*判断p是否为素数*/
{
if ((p%j)==0)
{
flagp = 0 ;
break; /*不是素数,退出循环*/
}
}
想明白这一部分是什么意思?
初学,请教一下各位前辈

# re: 验证哥德巴赫猜想  回复  更多评论   

2006-11-09 21:08 by 新手
还是有的地方看不懂。

# re: 验证哥德巴赫猜想  回复  更多评论   

2006-11-10 17:19 by maildaty
我觉得某些地方应该改一下啊
while(flagp*flagq==0);
上面这一句是不是有些问题????/

# re: 验证哥德巴赫猜想  回复  更多评论   

2006-12-07 11:10 by 米威
在我看来,觉得在验证是否为素数时调用个函数,也许会更加 清楚 明白 简洁!!

# re: 验证哥德巴赫猜想  回复  更多评论   

2008-03-15 10:12 by 被拔毛的老鹰
这代码不错,但是假如定义一个函数,并在第一个“p”不是素数时就退出可以执行的更快吧。

# re: 验证哥德巴赫猜想  回复  更多评论   

2009-07-03 08:38 by 方洲
一个偶数等于2个奇数相加,只要其中质数一个减去一个偶数,另一个奇数加上相同的偶数;最后那个偶数一定等于奇数+奇数。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理