//***************************************************//
//C语言验证歌德巴赫猜想的源代码 //
//***************************************************//
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,num;
int p,q,flagp,flagq;
printf("Please input a plus integer:");
scanf("%d",&num);
//代码(num%2)!=0表示num不能被2整除
if(((num%2)!=0) || (num <= 4))
printf("input data error!\n");
else
{
p = 1;
//do-while循环体
do
{
p = p+1;
q = num - p;
flagp = 1;
flagq = 1;
//for循环体
for(i = 2;i <=(int)(floor(sqrt((double)(p))));i++)
{
if((p%i) == 0)
{
flagp = 0;
break;
}
}
//while循环体
j = 2;
while(j <= (int)(floor(sqrt((double)(q)))))
{
if ((q%j) == 0)
{
flagq = 0;
break;
}
j++;
}
}while (flagp*flagq == 0);
printf("%d = %d + %d \n",num,p,q);
}
}
----------------解决方案--------------------------------------------------------
呵呵,我看您有必要把那个猜想的内容说下,
我也不记得那个啥玩意了
----------------解决方案--------------------------------------------------------
我说不到,HOHO,偶初学C滴,菜鸟一只,贴着你们看丫
----------------解决方案--------------------------------------------------------
歌德巴赫猜想
歌德巴赫是德国数学家。1742年他在研究将任何数表示成几个素数(质数)之和的问题时,把许多数分解成几个素数的和。例如:4=2+2,6=3+3,8=3+5,10=5+5,16=13+3等等。结果他发现了一个规律,任何一个数都可以分解成不超过三个素数的和,但是他不能证明这个论断,他写信给朋友大数学家欧拉,告诉欧拉他有下列的假定:“任何大于5的数一定是不超过三个的素数的和。”欧拉在回信中对歌德巴赫说:“他认为每个不小于6的的偶数都是两个素数之和,你的论断只是这个论断的推论。”但是欧拉也不能证明。于是关于“每一个不小于6 的偶数都可表示成两个奇素数之和”就成了著名的歌德巴赫猜想。
这个猜想使世界上许多数学家着迷,极尽所能想证明它。但是多少年来无人能加以证明。正当一些数学家感到无能为力时,英国数学家哈代、印度数学家拉玛努扬在1920年提出了“圆法”,挪威数学家布龙提出了“筛法”,前苏联数学家史里连曼在1930年提出了“密率”。这些计算方法提出后,在不到50年的时间里,歌德巴赫猜想的研究取得了惊人的成果。1962年我国数学家王元证明了一个充分大的偶数都可以表示为一个素数与一个不超过4个素数的乘积。而最伟大的成绩是1966年中国数学家陈景润证明了“每一个充分大的偶数都可以表示为一个素数与一个不超过二个素数的乘积之和”。简称“1+2”。虽然歌德巴赫猜想问题并没有最终解决,但是陈景润的证明引起了国际数学界的惊讶。称他的论文是解析数论的名作,是“筛法”的光辉顶点,是对研究歌德巴赫猜想的重大贡献,被誉为“陈氏定理”,这是我国数学史上一个光辉的里程碑。
中间判断质数的可以写一个子函数,还有就是没有必要那么多的强制类型转换,还有就是那个floor不知道是干什么的
呵呵
[此贴子已经被作者于2006-9-2 22:57:15编辑过]
----------------解决方案--------------------------------------------------------
floor(double num); ==>math.h
取不大于num的最大整数
----------------解决方案--------------------------------------------------------