Square-free integers: Difference between revisions
Content added Content deleted
m (Minor edit to C++ code) |
m (C++ - renamed class) |
||
Line 349: | Line 349: | ||
#include <iostream> |
#include <iostream> |
||
#include <string> |
#include <string> |
||
#include " |
#include "prime_sieve.hpp" |
||
using integer = uint64_t; |
using integer = uint64_t; |
||
bool square_free(const |
bool square_free(const prime_sieve& sieve, integer n) { |
||
if (n % 4 == 0) |
if (n % 4 == 0) |
||
return false; |
return false; |
||
Line 363: | Line 363: | ||
} |
} |
||
void print_square_free_numbers(const |
void print_square_free_numbers(const prime_sieve& sieve, integer from, integer to) { |
||
std::cout << "Square-free numbers between " << from |
std::cout << "Square-free numbers between " << from |
||
<< " and " << to << ":\n"; |
<< " and " << to << ":\n"; |
||
Line 382: | Line 382: | ||
} |
} |
||
void print_square_free_count(const |
void print_square_free_count(const prime_sieve& sieve, integer from, integer to) { |
||
integer count = 0; |
integer count = 0; |
||
for (integer i = from; i <= to; ++i) { |
for (integer i = from; i <= to; ++i) { |
||
Line 393: | Line 393: | ||
int main() { |
int main() { |
||
prime_sieve sieve(1000001); |
|||
print_square_free_numbers(sieve, 1, 145); |
print_square_free_numbers(sieve, 1, 145); |
||
print_square_free_numbers(sieve, 1000000000000LL, 1000000000145LL); |
print_square_free_numbers(sieve, 1000000000000LL, 1000000000145LL); |
||
Line 404: | Line 404: | ||
}</lang> |
}</lang> |
||
Contents of |
Contents of prime_sieve.hpp: |
||
<lang cpp>#ifndef |
<lang cpp>#ifndef PRIME_SIEVE_HPP |
||
#define |
#define PRIME_SIEVE_HPP |
||
#include <algorithm> |
#include <algorithm> |
||
Line 415: | Line 415: | ||
* See https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes. |
* See https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes. |
||
*/ |
*/ |
||
class |
class prime_sieve { |
||
public: |
public: |
||
explicit |
explicit prime_sieve(size_t); |
||
bool is_prime(size_t) const; |
bool is_prime(size_t) const; |
||
private: |
private: |
||
Line 428: | Line 428: | ||
* @param limit the maximum integer that can be tested for primality |
* @param limit the maximum integer that can be tested for primality |
||
*/ |
*/ |
||
inline |
inline prime_sieve::prime_sieve(size_t limit) { |
||
limit = std::max(size_t(3), limit); |
limit = std::max(size_t(3), limit); |
||
is_prime_.resize(limit/2, true); |
is_prime_.resize(limit/2, true); |
||
Line 448: | Line 448: | ||
* @return true if the integer is prime |
* @return true if the integer is prime |
||
*/ |
*/ |
||
inline bool |
inline bool prime_sieve::is_prime(size_t n) const { |
||
if (n == 2) |
if (n == 2) |
||
return true; |
return true; |