C语言验证哥德巴赫猜想

文章介绍了哥德巴赫猜想的基本概念,即任何大于2的偶数都可以表示为两个素数之和。通过一个C语言程序,验证了给定正整数a的所有可能分解,输出所有满足条件的b和c(b≤c且b和c都是素数),并按b的升序排列。程序通过判断素数的方法筛选出符合条件的数对。
摘要由CSDN通过智能技术生成


描述

哥德巴赫猜想(Goldbach's conjecture)是数论中存在最久的未解问题之一。这个猜想最 早出现在1742年普鲁士人克里斯蒂安•哥德巴赫与瑞士数学家莱昂哈德•欧拉的通信中。

用现代的数学语言,哥德巴赫猜想可以陈述为:任一大于2的偶数,都可表示成两个素数之和。

现在请验证“哥德巴赫猜想”。输入一个正整数a然后输出这个数所有形如a = b + c的形式。而其中b<=c且b和c均是素数,如果存在多种可能,请按b的升序输出所有的分解

输入
234

输出

234 = 5 + 229
234 = 7 + 227
234 = 11 + 223
234 = 23 + 211
234 = 37 + 197
234 = 41 + 193
234 = 43 + 191
234 = 53 + 181
234 = 61 + 173
234 = 67 + 167
234 = 71 + 163
234 = 83 + 151
234 = 97 + 137
234 = 103 + 131
234 = 107 + 127

分析
根据哥德巴赫猜想,我们可以得出如下信息:
哥德巴赫数字是一个大于2的偶数。
哥德巴赫数字等于两个素数相加。

思考:一个数a要分解成形如a=b+c的形式(a,b,c都是正整数)。那必然是 
            a=1+a-1
            a=2+a-2
            a=3+a-3
                 ......
            a=a/2+a/2
                ......
            a=a-3+3
            a=a-2+2
            a=a-1+1

因为b<=c并且且b是升序排列,而a是大于2的偶数,显然1不是素数,那么b只需要从2排到a/2就行了。
            a=2+a-2
            a=3+a-3
                 ......
            a=a/2+a/2
          

接着b和c是两个素数。那么只要筛选出b和c同时为素数的式子就行了。

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

//判断一个数是否是素数
int is_prime(int num)
{
	int i = 0;
	for (i = 2; i <= sqrt(num); i++)
	{
		if (num % i == 0)
			return 0;//不是素数则返回0
	}
	return 1;//是素数则返回1
}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	for (b = 2; b <= a / 2; b++)
	{
		if (is_prime(b) == 1 && is_prime(a - b) == 1)
			printf("%d = %d + %d\n", a, b, a - b);
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值