04:验证歌德巴赫猜想
描述
验证“歌德巴赫猜想”,即:任意一个大于2的偶数均可表示成两个素数之和。
输入
输入只有一个正整数x。(x是偶数,x <= 2000 且 x > 2)
输出
输出这个数的所有分解形式,形式为:
x = y + z
其中x为待验证的数,y和z满足y + z = x,而且 y <= z,y和z均是素数。
如果存在多组分解形式,则按照y的升序输出所有的分解,每行一个分解表达式。
注意数和符号之间隔一个空格。
样例输入
输入样例1:
10
输入样例2:
100
样例输出输出样例1:
10 = 3 + 7
10 = 5 + 5
输出样例2:
100 = 3 + 97
100 = 11 + 89
100 = 17 + 83
100 = 29 + 71
100 = 41 + 59
100 = 47 + 53
执行代码
#include <iostream>
using namespace std;
bool su(int i){
int sum=0;
for(int k=2;k<i;k++)//i=5
if(i%k==0)
sum++;
if(sum!=0)
return false;
else return true;
}
int main()
{ int n;
cin>>n;
const int N=n/2;
int a[N];
int m=0;
for(int i=2;i<n;i=i+1){
if(i%2==0&&i/2>1)//去除大于二的偶数
continue;
else if(su(i)){
a[m]=i;
m++;
}
}//把(1,n)的所有质数存入数组;假如输入9 则数组a[]中;10~2 3 5 7 9
//for(int i=0;i<m;i++)
//cout<<a[i];
for(int i=0;i<m-1;i++)
for(int j=i;j<m;j++)
if(n==a[i]+a[j])
cout<<n<<" "<<"="<<" "<<a[i]<<" "<<"+"<<" "<<a[j]<<endl;
return 0;}