我已经实现了Sieve of Eratosthenes来查找C ++中的素数。 这是我的代码
#include <bits/stdc++.h>
using namespace std;
const int SZ = 12345678;
vector<int> prime;
bool sieve() {
bitset<SZ> is_prime;
int limit = int(1e6) + 7;
for(int i = 3; i < limit; i += 2) {
if(!is_prime[i]) {
prime.push_back(i);
for(int j = i + i; j < limit; j += i)
is_prime[j] = true;
}
}
return true;
}
int main(void) {
clock_t start = clock();
sieve();
long long count = 0;
for(auto it = prime.begin(); it != prime.end(); ++it)
++count;
cout << count << endl;
clock_t end = clock();
cout << "Time taken: " << (double)(end - start) * 1000 / CLOCKS_PER_SEC << endl;
return 0;
}
当我使用clang++-3.6 main.cpp -Ofast -std=c++14
在代码上运行时,编译的二进制文件大约需要6秒才能运行,而使用g++ main.cpp -Ofast -std=c++14
编译的二进制文件编译时,相同的代码运行大约需要54秒。