1#ifndef LIPH_PRIME_SIEVE_H_
2#define LIPH_PRIME_SIEVE_H_
18 if (n < 2)
return false;
19 if (n <= max_)
return get_bit(n);
25 return is_prime_loop(n);
30 if (bits_)
delete[] bits_;
31 if (max_ <= 0)
return;
32 bits_ =
new char[max_ / 8 + 1];
33 memset(bits_, -1, max_ / 8 + 1);
34 for (
int i = 2; i <= max_; i++) {
36 for (
int j = i + i; j <= max_; j += i) {
43 bool is_prime_loop(
int n)
const {
45 for (
int i = 2; i * i <= n; i++) {
46 if (n % i == 0)
return false;
51 void set_bit_false(
int n) {
54 char& ch = bits_[n / 8];
55 ch &= ~(1 << (7 - n % 8));
58 bool get_bit(
int n)
const {
61 char ch = bits_[n / 8];
62 return ch & (1 << (7 - n % 8));
65 std::string debug_string()
const {
69 str += get_bit(i++) ?
'1' :
'0';
Definition: prime_sieve.h:10
static const int max_size
Definition: prime_sieve.h:12
~prime_sieve()
Definition: prime_sieve.h:15
bool is_prime(int n)
Definition: prime_sieve.h:17
prime_sieve(int max=0)
Definition: prime_sieve.h:13
Definition: algorithm.h:10