题目描述
输入一个偶数 N(N<=10000)N(N<=10000),验证4~N所有偶数是否符合哥德巴赫猜想:任一大于 2 的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。例如 10,10=3+7=5+5,则 10=5+5 是错误答案。
输入格式
第一行N
输出格式
4=2+2 6=3+3 …… N=x+y
输入输出样例
输入 #1复制
10
首先这道题需要想到把一个问题化为两步,先将一个偶数拆成两个数的和,然后在判断两个数是否都为质数,用函数嵌套的形式判断可简便代码,如下所示。
输出 #1
#include<stdio.h>
#include<math.h>
int zhishu(int n)//判断是否为质数,是返回0不是返回1
{
int i,b=0;
for(i=2;i<=sqrt(n);i++)
if(n%i==0)
{
b++;
break;
}
return b;
}
int guess(int n)//对质数进行猜想判断,不成立返回0.
{
int i;
for(i=2;i<=n/2;i++)
if(zhishu(i)==0)
{
if(zhishu(n-i)==0) return i;
}
return 0;
}
main()
{
int N,i;
scanf("%d",&N);
for(i=4;i<=N;i+=2)
if(guess(i)!=0) printf("%d=%d+%d\n",i,guess(i),i-guess(i));
}
复制
4=2+2 6=3+3 8=3+5 10=3+7