Factors of a Mersenne number: Difference between revisions

m
Put Sieve of Eratosthenes implementation in separate header file
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
m (Put Sieve of Eratosthenes implementation in separate header file)
Line 546:
#include <cstdint>
#include <vector>
class#include "sieve_of_eratosthenes.h"
 
typedef uint64_t integer;
Line 573 ⟶ 574:
return square;
}
 
class sieve_of_eratosthenes
public:
explicit sieve_of_eratosthenes(size_t max) : is_prime_(max, true)
{
is_prime_[0] = is_prime_[1] = false;
for (integer p = 2; p * p < max; ++p)
{
if (is_prime_[p])
{
for (integer q = p * p; q < max; q +=p)
is_prime_[q] = false;
}
}
}
bool is_prime(integer n) const
{
return is_prime_[n];
}
private:
std::vector<bool> is_prime_;
};
 
const integer limit = 100000U;
Line 624 ⟶ 602:
return 0;
}</lang>
 
Contents of sieve_of_eratosthenes.h:
<lang cpp>#ifndef SIEVE_OF_ERATOSTHENES_H
#define SIEVE_OF_ERATOSTHENES_H
 
#include <vector>
 
class sieve_of_eratosthenes
public:
explicit sieve_of_eratosthenes(size_t max) : is_prime_(max, true);
bool is_prime(integer nsize_t) const;
private:
std::vector<bool> is_prime_;
};
 
inline bool sieve_of_eratosthenes::is_prime(size_t n) const
{
return is_prime_[n];
}
 
inline sieve_of_eratosthenes::sieve_of_eratosthenes(size_t max)
: is_prime_(max, true)
{
is_prime_[0] = is_prime_[1] = false;
for (integersize_t p = 2; p * p < max; ++p)
{
if (is_prime_[p])
{
for (integersize_t q = p * p; q < max; q +=p)
is_prime_[q] = false;
{}
}
}
 
#endif</lang>
 
{{out}}
1,777

edits