验证哥德巴赫猜想

使用函数验证哥德巴赫猜想:任何一个不小于 6 的偶数均可表示为两个奇素数之和。
如 6=3+3,8=3+5,…,18=5+13。
将 6~100 之间的偶数都表示成两个素数之和,打印时一行打印 5 组。试编写相应程序。

分析:

  1. 需要一个判断素数的函数用来判断素数。(除2以外,凡是素数必是奇数)
  2. 其次需要一个循环变量以3(最小奇素数)为起始,每次循环给变量加2的循环,确保为奇数;再使用素数判断函数来判断是否为素数。
  3. 同时,将满足为奇素数的循环变量作为加项之一。
  4. 将所给偶数减去奇素数即为另一个加项,判断此加项是否为奇素数,若是,则满足“偶数=奇素数+奇素数”条件,进行输出。
  5. 所有情况输出完毕,进行下一个偶数验证。

程序如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>//malloc

int prime(int m);

int main() {
	int start = 6, finsh = 100, count=0;

	while (start <= finsh)
	{
		for (int i = 3; i <= start; i+=2)
		{
			//最小奇素数为3,且奇数不一定是素数,需要判断 
			if (prime(i) && prime(start - i)) 
			{
				/*if (i > (start - i))
				{
					break;
				}*/

				printf("%d=%d+%-4d\t", start, i, start - i);

				count++;

				if (count % 5 == 0) 
				{
					printf("\n");
				}
			}
		}

		start += 2;//保证为偶数
	}

	return 0;
}

int prime(int m) 
{
	//素数:只有1和它本身能被其整除,1不是素数,2是素数
	for (int i = 2; i < m; i++)
	{
		if (m % i == 0)
		{
			return 0;
		}
	}
	return 1;
}

image.png
可以发现,输出结果带有顺序不同但内容相同的重复项。
为了排除重复项,进行验证:若两项均为符合条件的奇素数,因为前项是从3开始增加,即当前项大于后项情况下输出的等式均为顺序不同但内容相同的重复项。故此时应结束当前循环。
将上一程序第 17 行开始处 if 判断程序取消注释:

if (i > (start - i))
{
	break;
}

修改程序后结果如下:
image.png

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值