哥德巴赫猜想:即任一大于2的偶数都可写成两个素数之和
详细思路在代码注释中
#include <iostream>
#include <string>
using namespace std;
void Calsub(int n){
int a = 2, b = n, flag, arr[100], ar = 0; //不要令b=n/2来试图减少时间复杂度,不然结果
// 会不对,我也不知道为什么
for (int i = a; i <= b; i++){ //创造从2到n的数i,并且判断i是否为质数
flag = 1; //用于标记i是否为质数
for (int j = 2; j <= i / 2; j++){ //判断所创造的i是否为质数
if (i % j == 0){ //判断i能不能整除j,如果可以,则不是质数
flag = 0; //标记置为0
break;
}
}
if (flag){ //i是质数,将i存入数组arr中
arr[ar] = i;
ar++;
}
}
for (int i = 0; (i<sizeof(arr) / sizeof(arr[0])) && (arr[i] <= n / 2); i++){
//从数组arr中取一个数arr[i],
for (int j = 0; j<sizeof(arr) / sizeof(arr[0]); j++){
//从数组中取一个数arr[j],判断所取得arr[j]是
// 否与arr[i]相加等于n,相等则符合哥德巴
// 赫猜想
if (arr[i] + arr[j] == n)cout << n << "=" << arr[i] << "+" << arr[j] << endl;
//输出所有符合的式子
}
}
}
int main()
{
int n;
cin >> n;
Calsub(n);
system("pause");
return 0;
}