RosettaCodeData/Task/Euclid-Mullin-sequence/C++/euclid-mullin-sequence.cpp

31 lines
722 B
C++

#include <cstdint>
#include <iostream>
uint64_t product = 2;
uint64_t smallest_prime_factor(const uint64_t& number) {
if ( number % 3 == 0 ) { return 3; }
if ( number % 5 == 0 ) { return 5; }
for ( uint64_t divisor = 7; divisor * divisor <= number; divisor += 2 ) {
if ( number % divisor == 0 ) { return divisor; }
}
return number;
}
uint64_t next_euclid_mullin() {
const uint64_t smallest_prime = smallest_prime_factor(product + 1);
product *= smallest_prime;
return smallest_prime;
}
int main() {
std::cout << "The first 9 terms of the Euclid-Mullin sequence:" << "\n";
std::cout << 2 << " ";
for ( uint32_t i = 1; i < 9; ++i ) {
std::cout << next_euclid_mullin() << " ";
}
std::cout << "\n";
}