这又臭又长的代码,有好心人帮我看看该如何优化吗 已给出思路以及一些注释
//P1304 哥德巴赫猜想
//任何大于2的偶数都可用两个质数相加
//且第一个尽可能小
//思路
// 判断偶数的函数
// 循环从1到这个偶数
// 判断质数的函数,遍历,从第一个质数开始下去,
// 相加得到这个数停止,若超过这个数,
// 让这个质数再接着下一个,继续循环
// 输出这个偶数和这个质数和相加的质数
//ps输出(n-2)/2行
#include<iostream>
#include<vector>
using namespace std;
int even(int x)
{
if (x % 2 == 0)
return x;
else
return 0;
}
int prime(int x)
{
for (int i = 2; i < x; i++) { //从2到x-1之间循环
if (x % i == 0) { //判断是否能整除
return 0;
}
}
return x;
}
int main()
{
vector<int>arr;
int n; cin >> n;
for (int i = 4; i <=n; i++)
{
if (even(i) != 0)//一个偶数一行表达式
{
for (int j = 2; j < i; j++)//判断质数 把所有质数列举出来
{
if (prime(j) != 0)
arr.push_back(j);
}
for (int j = 0; j < arr.size(); j++)//双指针 求相加得到偶数
{
for (int k = 0; k < arr.size(); k++)
{
if (arr[j] + arr[k] == i)
{
if (i == n && i == n - 1)
{
printf("%d=%d+%d", i, arr[j], arr[k]);
arr.clear();
break;
}
printf("%d=%d+%d\n", i, arr[j], arr[k]);
arr.clear();//我真是太机智了 这样就不会有重复的情况了
}
}
}
}
}
return 0;
}