下面这段代码试了一下,可以优化 20% 左右。
#include <vector>
#include <cmath>
#include <iostream>
using namespace std;
int intperf()
{
constexpr int n = 5000 * 10000;
bool found = false;
vector<int> primes;
primes.reserve(n);
primes.push_back(2);
primes.push_back(2);
primes.push_back(2);
primes.push_back(2);
for (int i = 3; i <= n; i += 2) {
int t = static_cast<int>(primes.size()) - 4;
for (int it = 0; it <= t ; it += 4) {
int j0 = primes[it + 0];
int j1 = primes[it + 1];
int j2 = primes[it + 2];
int j3 = primes[it + 3];
if ((i % j0 == 0) || (i % j1 == 0) || (i % j2 == 0) || (i % j3 == 0)) {
found = true;
break;
}
if (j0 * j0 > i) {
break;
}
}
if (!found) {
primes[t + 1] = i;
primes.push_back(2);
} else {
found = false;
}
}
return primes.size() - 3;
}
int main()
{
cout << intperf() << endl;
return 0;
}
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 随便写的代码,cpp 还经常弱于 python 和 c# 呢。c# 和 python 底层用的都是优化过的 c 代码。
: 我觉得 cpp 写代码的好处在于优化上限高,内存占用低。我优化一下这段代码看看。。
--
修改:hgoldfish FROM 124.72.118.*
FROM 124.72.118.*