<C语言程序实例>C语言实现哥德巴赫猜想

这里的将从6-100的有限范围进行实现,读者可自行根据方法拓展


前言

  在学习C语言一段时间后,这种问题感觉还是可以学习一下的,看似很难,但基本原理还是比较简单的。


一、什么是哥德巴赫猜想?

  哥德巴赫猜想是世界近代三大数学难题之一。
  哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的整数都可写成三个质数之和 。但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死,欧拉也无法证明。 因现今数学界已经不使用“1也是素数”这个约定,原初猜想的现代陈述为:任一大于5的整数都可写成三个质数之和。(n>5:当n为偶数,n=2+(n-2),n-2也是偶数,可以分解为两个质数的和;当n为奇数,n=3+(n-3),n-3也是偶数,可以分解为两个质数的和)欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和。今日常见的猜想陈述为欧拉的版本。把命题"任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b"。1966年陈景润证明了"1+2"成立,即"任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和"。
  今日常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。

  今天我们这里用C语言实现的就是欧拉版本的哥德巴赫猜想。

二、实现代码

代码如下:

#include "stdio.h"
#include "math.h"
void main()
{
	void print(int n);
	int prime(int n);
	int i;
	
	for(i=6;i<=100;i+=2)
	{
		print(i);
	} 
}
/*************对某一个偶数进行拆分****************/
//从2开始拆分,一直拆分到n/2;拆分出2和n-2,3和n-3.......一直拆分到n/2和n-n/2
//这里的偶数就是主函数传来的6-100的偶数

void print(int n)
{
	int i;
	for(i=2;i<=n/2;i++)
	{
		if(prime(i)&&prime(n-i))//判断拆分出的两个数是不也是素数
		{
			printf("%d=%d+%d\n",n,i,n-i);
			}
		}		
}
/***********判断是不是素数************/
int prime(int n)
{
	int i;
for(i=2;i<=sqrt(n);i++)//这里就涉及到使用根号的素数判断
{
	if(n%i==0)
	{
		return 0;//不是素数返回0
	}
}
	return 1;//是素数返回1
	
}

总结

欢迎大家交流学习,让我们能够共同进步!0.O

更多推荐

<C语言程序实例>C语言实现哥德巴赫猜想