Square-free integers: Difference between revisions

Content added Content deleted
(added Tcl)
m (Reformatted to reduce line count)
Line 353: Line 353:
using integer = uint64_t;
using integer = uint64_t;


bool square_free(const sieve_of_eratosthenes& sieve, integer n)
bool square_free(const sieve_of_eratosthenes& sieve, integer n) {
{
if (n % 4 == 0)
if (n % 4 == 0)
return false;
return false;
for (integer p = 3; p * p <= n; p += 2)
for (integer p = 3; p * p <= n; p += 2) {
{
if (sieve.is_prime(p) && n % (p * p) == 0)
if (sieve.is_prime(p) && n % (p * p) == 0)
return false;
return false;
Line 365: Line 363:
}
}


void print_square_free_numbers(const sieve_of_eratosthenes& sieve, integer from, integer to)
void print_square_free_numbers(const sieve_of_eratosthenes& 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";
std::string line;
std::string line;
for (integer i = from; i <= to; ++i)
for (integer i = from; i <= to; ++i) {
if (square_free(sieve, i)) {
{
if (square_free(sieve, i))
{
if (!line.empty())
if (!line.empty())
line += ' ';
line += ' ';
line += std::to_string(i);
line += std::to_string(i);
if (line.size() >= 80)
if (line.size() >= 80) {
{
std::cout << line << '\n';
std::cout << line << '\n';
line.clear();
line.clear();
Line 388: Line 382:
}
}


void print_square_free_count(const sieve_of_eratosthenes& sieve, integer from, integer to)
void print_square_free_count(const sieve_of_eratosthenes& 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) {
{
if (square_free(sieve, i))
if (square_free(sieve, i))
++count;
++count;
Line 400: Line 392:
}
}


int main()
int main() {
{
sieve_of_eratosthenes sieve(1000001);
sieve_of_eratosthenes sieve(1000001);
print_square_free_numbers(sieve, 1, 145);
print_square_free_numbers(sieve, 1, 145);