Sexy primes: Difference between revisions
Use boost::circular_buffer
(→{{header|Wren}}: Now uses 'fmt' module.) |
(Use boost::circular_buffer) |
||
Line 305:
=={{header|C++}}==
{{libheader|Boost}}
<lang cpp>#include <
#include <iostream>
#include <vector>
#include <boost/circular_buffer.hpp>
#include "sieve_of_eratosthenes.h"
int main() {
using std::cout;
using std::vector;
using boost::circular_buffer;
using group_buffer = circular_buffer<vector<int>>;
const int max = 1000035;
Line 324 ⟶ 328:
sieve_of_eratosthenes sieve(array_size);
vector<
int unsexy_count = 0;
for (int p = 2; p < max; ) {
if (!sieve.is_prime(p + diff) && (p - diff < 2 || !sieve.is_prime(p - diff))) {▼
▲ if (!sieve.is_prime(p + diff) && (p - diff < 2 || !sieve.is_prime(p - diff)))
// if p + diff and p - diff aren't prime then p can't be sexy
++unsexy_count;
unsexy_primes.push_back(p);
} else {
// find the groups of sexy primes that begin with p
int group_size = 1;
vector<int> group;
group.push_back(p);
for (int i = 1; i < max_group_size; ++i) {
int next_p = p + i * diff;
if (next_p >= max || !sieve.is_prime(next_p))
break;
group.push_back(next_p);
}
for (int i = 1; i < group_size; ++i)
Line 366 ⟶ 359:
}
for (int size = 1; size < max_group_size; ++size) {
cout << "number of groups of size " << size + 1 << " is " << group_count[size] << '\n';
cout << "last " << groups[size].size() << " groups of size " << size + 1 << ":";
for (const vector<int>& group : groups[size]) {
cout << " (";
for (size_t i = 0; i < group.size(); ++i) {
if (i > 0)
cout << ' ';
Line 383 ⟶ 373:
cout << "\n\n";
}
cout << "number of unsexy primes is " << unsexy_count << '\n';
cout << "last " << unsexy_primes.size() << " unsexy primes:";
Line 389 ⟶ 378:
cout << ' ' << prime;
cout << '\n';
return 0;
}</lang>
|