循环结构验证哥德巴赫猜想

目录

哥德巴赫猜想:

验证内容:

问题分析(思路):

C语言代码展示:

哥德巴赫猜想:

哥德巴赫猜想是世界著名的数学难题,至今未能在理论上得到证明,自从计算机出现后,人们就开始用计算机去尝试解各种各样的数学难题,包括费马大定理、四色问题、哥德巴赫猜想等,虽然计算机无法从理论上严谨地证明它们,而只能在很有限的范围内对其进行检验,但也不失其意义。费马大定理已于1994年得到证明,而哥德巴赫猜想这枚数学王冠上的宝石,至今无人能及。

验证内容:

验证哥德巴赫猜想即验证:任一充分大的偶数,可以用两个素数表示。例如,4=2+2,6=3+3,98=19+79.

问题分析(思路):

读入一个偶数n,将它分成p和q,使n=p+q怎样分呢?可以令p从2开始,每次加
1,而令q=n-p,如果p、q均为素数,则正为所求,否则令p=p+1再试。
这一思路的算法如下:
(1)读入大于3的偶数n
(2)p=1
(3)do(
(4)p=p+1;q=n-P;

(5)p是素数吗?
(6)q是素数吗?
(7)) while p、q有一个不是素数
(8)输出n=p+q
为了判明p、q是否是素数,设置两个标志量flagp和flagq,初始值为 0,若p是素数,令flagp=1,若q是素数,令flagq=1,于是第(7)步变成:
) while(flagp*flagq==0);
再来分析第(5)步、第(6)步,怎样判断一个数是不是素数呢?按照前面介绍的的方法,于是,上述算法中的第(5)步、第(6)步可以细化如下:

第(5)步:p是素数吗?
flagp=1;
for(j=2;j<=(int)sqrt(p);j++)
if(p除以j的余数==0)
(flagp=0; break;)
第(6)步:q是素数吗?
flagq=1;
for(j=2;j<=(int)sqrt(q);j++)
if(q除以j的余数==0)

{flagq=0;break;}

C语言代码展示:

#include
#include
#include
int main()
{
	int i,n,p,q,flagp,flagq;
	printf("please input n:");
	scanf("%d",&n);
	if(n<4||n%2!=0)
	{
		printf("input data error!\n");
		exit(-1);//程序结束
	}
	p=1;
	do
	{
		p++;
		q=n-p;
		flagp=1;
		for(i=2;i<=(int)sqrt(p);i++)
		{
			if(p%i==0)
			{
				flagp=0;
				break;
			}
		}
		flagq=1;
		for(i=2;i<=(int)sqrt(q);i++)
		{
			if(q%i==0)
			{
				flagp=0;
				break;
			}
		}
	}while(flagp*flagq==0);//当p,q有一个不为素数时继续循环
	printf("%d=%d+%d\n",n,p,q);
	return 0;
}

测试98,9

运行结果:

please input n:98
98=19+79

--------------------------------
Process exited after 2.903 seconds with return value 0
请按任意键继续. . .
please input n:9
input data error!

--------------------------------
Process exited after 2.332 seconds with return value 4294967295
请按任意键继续. . .

你可能感兴趣的:(c语言)