2测试点超时,如何优化,我尽力了
查看原帖
2测试点超时,如何优化,我尽力了
804938
l763447370楼主2022/11/10 23:53

这又臭又长的代码,有好心人帮我看看该如何优化吗 已给出思路以及一些注释

//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;
}
2022/11/10 23:53
加载中...