HuskyRye @ 2017-08-29 16:16:18
150ms的思路: 打质数表,三层 for 循环遍历质数表,如果相等,就输出。
浪费在于:花了很多时间生成质数表,vector::push_back,vector::operator[] 等等
0ms的思路:
最后贴一下代码:遍历前两个数,用减法算出第三个数,且第三个数大于第二个数,如果三者都为质数,就输出
这样的好处在于:不需要频繁访问vector元素
#include <iostream>
#include <cmath>
using namespace std;
bool prime(int n)
{
int temp = sqrt(n);
for (int i = 2; i <= temp; ++i) {
if (n % i == 0)
return false;
}
return true;
}
int main()
{
int n;
cin >> n;
int k;
for (int i = 2; i < n; ++i)
for (int j = 2; (k = n-i-j) >= j; ++j) {
if (prime(i) && prime(j) && prime(k)) {
cout << i << ' ' << j << ' ' << k << '\n';
return 0;
}
}
}
by 暮光 @ 2017-09-04 16:04:00
可以继续优化 线性筛法得到素数表 两重循环遍历素数表 如果 第二个素数达到 n-第一个素数 的一半,第二重循环break。。