C语言:编写程序验证哥德巴赫猜想

目录

1. 哥德巴赫思想的解释

2. 程序设计思路

   2.1 判断输入值是否为偶数   

   2.2 写 prime 函数判断一个数是否为素数

   2.3 加数 b 要满足的条件

3. 完整程序代码

4. 运行结果


1. 哥德巴赫思想的解释

          哥德巴赫猜想:任何充分大的偶数都可由两个素数之和来表示,如 4=2+2,6=3+3,8=3+5······

2. 程序设计思路

         (1)首先调用 scanf ,获取键盘输入的一个数,设为 n

         (2)用 if 语句判断输入值 n 是否为偶数 (详见2.1)

         (3)写一个函数 prime 判断 n 的两个加数 a,b(a>b) 是否为素数 (详见2.2)

注意 !(4)明确 b 需要满足的条件(详见2.3)

        2.1 判断输入值是否为偶数   

printf("请输入一个偶数:>");
scanf("%d", &n);
if (n % 2 == 0)              //判断 n 是否为偶数
{


}

        2.2 写 prime 函数判断一个数是否为素数

//判断一个数是否为素数
int prime(int i)
{
	if (i >= 2)
	{
		int j = 2;
		for (j = 2; j <= sqrt(i); j++)       //运用数学思想,若一个实数不能被其平方根前所有 > 2 的整数整除,则为素数
		{
			if (i % j == 0)
				return 0;
		}
		return 1;
	}
	else
		return 0;
}

       2.3 加数 b 要满足的条件

        若没加 b 的条件,仅仅通过判断a,b是否为素数打印结果,见代码如下:

if (prime(a) && prime(b))    //调用 prime函数,判断a,b是否为素数。
{
	printf("%d=%d+%d\n", n, a, b);
}

        打印结果如下:

          显然,图中 第2 结果并不是我们所想要的。第2项 结果与第1项 在实际意义上是重复的。

          因此,为避免打印结果重复,增加条件 b >= n/2,即可符合要求。

          改善后代码如下:

if (prime(a) && prime(b) && b >= n / 2)    //调用 prime函数,判断a,b是否为素数。并且b要满足所述条件
{
	printf("%d=%d+%d\n", n, a, b);
}

        打印结果如下:     

3. 完整程序代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>


//判断一个数是否为素数
int prime(int i)
{
	if (i >= 2)
	{
		int j = 2;
		for (j = 2; j <= sqrt(i); j++)       //运用数学思想,若一个实数不能被其平方根前所有 > 2 的整数整除,则为素数
		{
			if (i % j == 0)
				return 0;
		}
		return 1;
	}
	else
		return 0;
}


int main()
{
	int n, a, b;                         //a,b为 n 的两个加数 
input:                                   //在此运用 goto 语句,若输入错误,可返回重新输入
	printf("请输入一个偶数:>");
	scanf("%d", &n);
	if (n % 2 == 0)                      //判断 n 是否为偶数
	{
		for (a = 2; a < n; a++)
		{
			b = n - a;
			if (prime(a) && prime(b) && b >= n / 2)    //调用 prime函数,判断a,b是否为素数。并且b要满足所述条件
			{
				printf("%d=%d+%d\n", n, a, b);
			}
		}
	}
	else
	{
		printf("输入错误,请重新输入\n\n");
		goto input;
	}
	return 0;
}

4. 运行结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值