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

哥德巴赫猜想:任何一个大于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;
	}
}

运行结果:

 

 

  • 6
    点赞
  • 25
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论 1

打赏作者

ibuki_fuko

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值