哥德巴赫猜想:任何一个大于6的偶数,都由两个素数相加组成

一、程序设计思路:

任意输入一个大于6的偶数,打印出组成它的两个素数。

例如输入偶数n,使n = i + j,i与j均为素数。

可利用穷举法查找i与j的值,因为n从6开始,故i可以从3开始尝试(因为1不是素数,若i=2且n是大于6的偶数,则j必定不是素数),判断i是否为素数,若i是素数则判断j(可求出j=n-i)是否为素数,若成立则返回结果,若不成立则i+=2继续查找下一个素数(因为i=3开始,故以2为步长取值令i+=2可以更快找出i的值)

二、准备过程

想要实现此代码,首先需要知道如何判断一个数是否为素数。

判断素数:对于一个整数k,如果k不能被2到根号k之间的所有整数除尽,则k是素数

sqrt() 是开根号函数

#include <math.h>
int main()
{
	printf("请输入一个整数:");
	int k = 0, flag = 1;
	scanf("%d", &k);
	for (int i = 2; i <= sqrt(k); i++)
	{
		if (k % i == 0)
		{
			flag = 0;
			break;
		}
	}
	if (flag == 1)
		printf("%d是素数", k);
	else
		printf("%d不是素数", k);
	return 0;
}

代码解析:上述代码中,输入整数k,定义flag为1,i为2。如果k除i没有余数即k对i取模为0,那么flag=0并结束for循环,k不是素数。如果k除i有余数即k对i取模不为0,那么i++,i=3,继续判断k对i取模是否为0,直至i不满足for循环条件i <= sqrt(k),若此时flag依旧是1,则k是素数。

三、代码实现-验证哥德巴赫猜想

#include <math.h>
int main()
{
	int n, i, j, m, k;
loop1:
	printf("请输入一个大于6的偶数:");
	scanf("%d", &n);
	if (n >= 6 && n%2==0) {
		for (i = 3; i <= n / 2; i+=2) {
			int flag1 = 1;
			for (j = 2; j <= sqrt(i) + 1; j++) {
				if (i % j == 0)
				{
					flag1 = 0;
					break;
				}
			}
			
		if (flag1 == 1) 
		{
			m = n - i;
			int flag2 = 1;
			for (k = 2; k <= sqrt(m); k++)
				if (m % k == 0)
				{
						flag2 = 0;
						break;
				}

		if (flag2 == 1)
		{
			printf("偶数%d由素数%d和素数%d组成。", n, i, m);
			break;
		}
		}
		}
	}
	else
	{
		printf("请输入合法数字!\n");
		goto loop1;
	}
}

运行结果:

 

 

更多推荐

C语言入门基础_验证哥德巴赫猜想