我觉得不应该优化他的代码。他的目的是对比运行效率。
如果要优化代码,那有两个很容易加速的:
内循环的边界测试it < cc没有必要。质数的平方肯定大于下一个质数。
内循环的j * j > i测试应该在循环外将i开方。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 标 题: Re: 出乎意料,C++和dotnet6比dotnet5慢10% (转载)
: 发信站: 水木社区 (Sun Dec 12 17:24:08 2021), 站内
:
: 下面这段代码试了一下,可以优化 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 于 Dec 12 17:29:02 2021 修改本文·[FROM: 124.72.118.*]
: ※ 来源:·水木社区 mysmth.net·[FROM: 124.72.118.*]
--
修改:hgoldfish FROM 124.72.118.*
FROM 73.15.185.*