1.问题描述:
原初猜想的现代陈述为:任一大于5的整数都可写成三个质数之和。. (n>5:当n为偶数,n=2+(n-2),n-2也是偶数,可以分解为两个质数的和;当n为奇数,n=3+(n-3),n-3也是偶数,可以分解为两个质数的和)欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和。
2.思路:
对小于目标的数进行质数判断,再进行相加判断,详细请看代码。注意,1不是质数。
3.代码:此代码对3到100中偶数进行了判断
#include<math.h>
#include<iostream>
using namespace std;
int judge(int num)//判断是否为质数
{
if (num == 2 || num == 3)return 1;//num为2或3直接判断为质数
int i, m;
m = sqrt(num);
for (i = 2; i <= m; i++)
{
if ((num % i) == 0)//如果有不是1和本身的因数则判断为不是质数
{
return 0;
}
}
return 1;
}
void solve(int num)//找出两个质数
{
//使用嵌套循环,找出符合条件的两个质数,此处j可以从num递减循环,可进行初步的算法优化
for (int i = 2; i <= num; i++)//1不是质数,直接从2开始
{
for (int j = 2; j <= num; j++)
{
if (judge(i) && judge(j) && i + j == num)//是质数,并且相加为num
{
cout << num << "的两个质数为:" << i << " " << j << " " << endl;
cout << endl;
return;
}
}
}
}
int main()//004
{
for (int n = 3; n <= 100; n++)//对100内大于2的数进行查找
{
if (n % 2 == 0)//对n为偶数生效
{
solve(n);
}
}
system("pause");
return 0;
}
4.部分结果:
小小代码奉上,希望有所帮助。