今天无意间看到一个关于哥德巴赫猜想非常天才的做法,记录记录!邓少(我们老师)说函数和链表都是c语言当中非常重要的内容,所以最近我打算交叉着写一写。٩(๑>◡<๑)۶٩(๑>◡<๑)۶
题目:
任一个大于等于4的偶数都可以拆分为两个素数之和,验证这个定理
输入:
一个整数n( 4 <= n <= 200 )
输出:
将小于等于n的偶数拆分为2个质数之和,列出所有方案!
#include <stdio.h>
#include <math.h>
#define s 1000
int p[s+1];
int xuan(int n)
{
int i=0;
for(int i=0;i<=n;i++)
p[i]=1;
p[0]=p[1]=0;
int t;
t=(int)sqrt(n);//与素数的定义有一定关系,一个素数是从2~根号(该素数)都除不尽的
for(i=2;i<=t;i++)
if(p)
for(int j=2*i;j<=n;j+=i)//筛去素数的整数倍 (从2倍开始,不得不说真是天才方法)相当于是2*i+i+i+i+i...即是i的倍数
p[j]=0;//让i的倍数为0,那么数组中为0的数都不是素数
}
int fen(int n)
{
for(int i=3;i<=n/2;i++)//把传进来的这个偶数从中间截断,然后用偶数减去左边的素数的方法找到右边的素数,不得不说,天才!!!!
{
if(p[i]&&p[n-i])
{
printf("%d+%d=%d",i,n-i,n);
break;
}
}
}
int main()
{
int a;
scanf("%d",&a);
if(a%2!=0)
a++;
xuan(s);
fen(a);
return 0;
}
这种做法真的很有趣,而且还很节省空间,是居家必备,万里挑一的好方法!想出这个方法的不是我,原作者我找不到了 ̄□ ̄||,sorry~那今天就分享这个,祝福看到我文章的朋友,今天也要开心哦!(*^▽^*)(*^▽^*)