概要
タイトル通りです
constexpr auto p = Prime<100000, 9592>();
p.prime[hoge]
みたいに使います
fugaが素数かを見たい時は
p.sieve[fuga]
みたいに使います
以下本編です
template<size_t max_N, size_t prime_size> struct Prime{ bool sieve[max_N]; int_fast64_t prime[prime_size]; size_t counter = 0; constexpr Prime() : sieve(), prime() { for(int_fast64_t i = 0; i < max_N; ++i) sieve[i] = true; sieve[0] = sieve[1] = false; for(int_fast64_t i = 2; i < max_N; ++i){ if(sieve[i]){ prime[counter] = i; ++counter; if(counter > prime_size)break; } for(int_fast64_t j = i * i; j < max_N; j += i) sieve[j] = false; } } };
本編ここまで