我正在编写一个程序,以生成范围在1到10 ^ 9之间的质数,但是它似乎超时了。
我尝试使用位集和编译指示优化代码。
请问我还有其他方法可以优化我的代码。下面的代码
#include <bitset>
#include <vector>
#include <iostream>
#include <algorithm>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
using namespace std;
#define int long long
const int LIM = 1e9;
bitset<100000000> sieve;
void compute(int limit)
{
if (limit > 2)
cout << "2 ";
if (limit > 3)
cout << "3 ";
for (int x = 1; x * x < limit; x++) {
for (int y = 1; y * y < limit; y++) {
int n = (4 * x * x) + (y * y);
if (n <= limit && (n % 12 == 1 || n % 12 == 5))
sieve.flip(n);
n = (3 * x * x) + (y * y);
if (n <= limit && n % 12 == 7)
sieve.flip(n);
n = (3 * x * x) - (y * y);
if (x > y && n <= limit && n % 12 == 11)
sieve.flip(n);
}
}
for (int r = 5; r * r < limit; r++) {
if (sieve.test(r)) {
for (int i = r * r; i < limit; i += r * r)
sieve.reset(i);
}
}
for (int i = sieve._Find_first(); i < sieve.size(); i = sieve._Find_next(i)) {
if (i == 0 || i == 1)
continue;
cout << i << " ";
}
cout << endl;
}
signed main()
{
compute(LIM);
return 0;
}
谢谢。