C++ 素数列挙
エラトステネスの篩による素数の列挙
テンプレート
#include <iostream>
#include <vector>
using namespace std;
class Prime {
// n以下の素数を列挙する
public:
const int n;
vector<bool> is_prime;
vector<int> primes;
Prime(int size) : n(size), is_prime(n+1, true) {
is_prime[0] = false;
is_prime[1] = false;
for (int i = 2; i <= n; ++i) {
if (!is_prime[i]) continue;
primes.push_back(i);
int tmp = 2*i;
while (tmp <= n) {
is_prime[tmp] = false;
tmp += i;
}
}
}
bool check(int x) { return is_prime[x]; }
};
int main() {
Prime prime(10);
for (int p : prime.primes) {
cout << p << endl;
}
}
利用例
% g++ -std=gnu++1y -O2 prime.cpp -o prime
% ./prime
2
3
5
7