Successive prime differences: Difference between revisions

Content added Content deleted
(→‎{{header|Raku}}: fix up internal link)
m (Put Sieve of Eratosthenes implementation in separate header file)
Line 144: Line 144:
#include <cstdint>
#include <cstdint>
#include <vector>
#include <vector>
#include "sieve_of_eratosthenes.h"


using integer = uint32_t;
using integer = uint32_t;
using vector = std::vector<integer>;
using vector = std::vector<integer>;

class sieve_of_eratosthenes {
public:
explicit sieve_of_eratosthenes(size_t);
bool is_prime(integer n) const {
return is_prime_[n];
}
private:
std::vector<bool> is_prime_;
};

sieve_of_eratosthenes::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;
}
}
}


void print_vector(const vector& vec) {
void print_vector(const vector& vec) {
Line 240: Line 220:
return 0;
return 0;
}</lang>
}</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);
bool is_prime(size_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 (size_t p = 2; p * p < max; ++p)
{
if (is_prime_[p])
{
for (size_t q = p * p; q < max; q +=p)
is_prime_[q] = false;
}
}
}

#endif</lang>


{{out}}
{{out}}