【问题描述】写一个函数验证哥德巴赫猜想: 一个不小于6的偶数可以表示为两个素数之和,如6=3+3, 8=3+5, 10=3+7,…。
【输入形式】从键盘输入一个数,该数不超过10000。
【输出形式】输出这个数表示为两个素数之和的所有可能。
【样例输入】16
【样例输出】
16=3+13
16=5+11
【样例说明】16既可以表示为素数3和素数13的和,也可以表示为素数5和素数11的和。
参考主程序:
int main()
{
int number;
cin >> number;
Goldbach(number);
return 0;
}
#include<iostream>
using namespace std;
int main() //主函数
{
void Goldbach(int x);
int number;
cin>>number;
Goldbach(number);
return 0;
}
int sushu(int x) //定义素数的判断函数
{
int num=0; //定义num计数
if(x==1) //当值为1时num加一
{
num++;
}
else //当值大于等于2时
{
for(int i=2;i<x;i++) //值为2时不进行for循环,num为0不变
{ //值大于2时进行循环
if(x%i==0) num+=1; //从2开始除,若余数为0,则计数加一
}
}
if(num==0) num=x; //若计数为0,表示无因数,将x的值赋给num
else num=0; //余数不为0,表示有因数,将0赋给num
return num; //返回num,若为0表示不为素数,否则num即为此素数值
}
void Goldbach(int x)
{
int a,b; //定义a,b表示可能的加法情况
for(int i=2;i<=x/2;i++)
{
a=sushu(i); //进行素数判断
b=sushu(x-i);
if(a!=0&&b!=0) cout<<x<<"="<<a<<"+"<<b<<endl;
//若均不为0,则输出
}
}