欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用简单的C语言程序验证哥德巴赫猜想(是验证不是证明啦)

程序员文章站 2022-07-08 16:01:39
...

题目需求

输入一个非二的偶数,验证它可以分解成两个质数的和。

我的想法

第一种方法:先把所有质数列出来,然后再从中找出两个质数相加等于输入的偶数,从而完成验证。
法一代码:下面展示一些 内联代码片

#include<stdio.h>
int main()
{
	int judge, i, j, k, l;
	printf("请输入你想验证的偶数\n");
	scanf_s("%d", &judge);
	for (i = 1; i < 99999; i++)
	{
		for (j = 2; j <= i; j++)
		{
			if (i % j == 0 && j != i) {
				break;
			}
			else if (i % j == 0 && j == i)
			{
				for (k = 1; k < 99999; k++)
				{
					for (l = 2; l <= k; l++)
					{
						if (k % l == 0 && k != l) {
							break;
						}
						else if (k % l == 0 && k == l) {
							if (judge == k + i) {
								printf("这个偶数是由这两个质数构成的:%d %d\n", i, k);
								break;
							}
							else
								continue;
						}
					}
				}
			}
		}
	}
	return 0;
}

法一缺陷
1.运算过程太多循环,需要的时间长
2.不知道什么原因,即使把所有可能情况全部列出后程序依旧无法结束
用简单的C语言程序验证哥德巴赫猜想(是验证不是证明啦)
用简单的C语言程序验证哥德巴赫猜想(是验证不是证明啦)
改进方法——法二
思路:我们只需要验证存在性,而不是列出来所有情况,所以我们可以通过偶数找质数,只要找出一对符合条件的质数程序就可以结束了
法二代码
下面展示一些 内联代码片

#include <stdio.h>
int main()
{
	int i = 1, j, divide;
	int judge(int x);
	printf("输入你想验证的偶数\n");
	scanf_s("%d", &divide);
	while (i < divide)
	{
		i++;
		j = divide - i;
		if (judge(i) && judge(j)) {
			printf("%d可以被分解为%d和%d\n", divide, i, j);
			break;
		}
		else
			continue;
	}
	return 0;
}

int judge(int x)
{
	int y = 2;
	while (x % y != 0)
		y++;
	if (y == x)
		return 1;
	else
		return 0;
}

通过构造挑选判断质数的函数judge可以简化程序,这个程序的结果会变得非常简洁。
用简单的C语言程序验证哥德巴赫猜想(是验证不是证明啦)

相关标签: c语言