质数讲解以及基础c语言实现的歌德巴赫猜想

//质数问题及哥德巴巴赫的猜想
//首先我们要学会什么是质数以及如何判断一个质数
//什么是质数:除1外只能被自身整除的数叫做质数
//我们先来判断一个质数

//int main()
//{
//	int number = 0;
//	int i = 0;
//	int count = 0;
//
//	scanf("%d", &number);
//	for (i = 2; i <= a - 1; i++)
//	{
//		if (a % i == 0)
//		{
//			count++;
//			break;
//		}
//	}
//	if (count == 0)
//	{
//		printf("是质数");
//	}
//	else
//	{
//		printf("不是质数");
//	}
//	return 0;
//}

//如果用for (i = 2; i <= number - 1; i++)这种去判断是否为质数
//计算机运算的过程是不是很多
//所以我们可以改进一下 
//首先偶数除了2以外都可以被2整除,所以偶数都不是质数
//然后我们在一个数前一半去找它的因数
//  如果找不到,那也就不可能在它的后面找到这个因数对应的因数,也就一定是质数
//  如在7前一半找 1  2  3;都不是7的因数,那么在7的后面是不是也就找不到7的因数
// 我们再按这个逻辑走下去,进行延申。
//例如 2*4=8 3*3=9 3*4=12 2*6=12 3*5=15 10*10=100 50*2=100
//我们是不是可以发现总有一个数是小于等于这个数的根号的。
//于是for(i=2;i<=sqrt(number),i++)就可以减少计算量。
// 
//欧克了,我们学会了判断质数,再来大boss《验证歌德巴赫猜想》之一
//先来说下(现代版本)歌德巴赫猜想之一是什么:任意大于2的偶数都可以写成两个质数的和
//但当时是以1为质数的原则,现在已经不遵循这个原则了,所以我们从4开始判断
//我们来验证4-100以内的偶数
//逻辑:我们可以取2个数,一个在2/k前取,一个在其后取,然后分别验证是否都为质数。
//逻辑成立 操作。

int main()
{
	int Num = 0; int i = 0;
	int num1 = 0; int num2 = 0;
	int count1 = 0; int count2 = 0;
	
	for (Num = 4; Num <= 100; Num=Num+2)
	{

		for (num1 = 2; num1 <=Num/2; num1++)
		{
			count1 = 0;
			for (i = 2; i <= sqrt(num1);i++)
			{
				if (num1 % i == 0)
				{
					count1++;
					break;
				}
				if (num1 ==2)
				{
					count1 = 0;
				}
			}
			if (count1 == 0)
			{
				num2 = Num - num1;
				count2 = 0;
				for (i = 2; i <=sqrt(num2); i++)
				{
					if (num2 % i == 0)
					{
						count2++;
						break;
					}
					if (num1 == 2)
					{
						count2 = 0;
					}
				}
				if (count2 == 0)
				{
					printf("%d+%d=%d\n", num1, num2, Num);
					break;
				}
			}
		}
	}

	return 0;

}

ok解决

我们来梳理一下要点

1.首先我们得逻辑要先有个大概方向

2.我们得注意数据count1 count2的初始化,以及break的一些小细节。

此篇献给一些刚入门的学者,只用了循环与判断的知识,希望能帮助到你们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值