Unprimeable numbers: Difference between revisions
m
Reformatted to reduce line count
m (→{{header|REXX}}: optimized the program.) |
m (Reformatted to reduce line count) |
||
Line 223:
// return number of decimal digits
int count_digits(integer n) {
int digits = 0;
for (; n > 0; ++digits)
Line 232 ⟶ 231:
// return the number with one digit replaced
integer change_digit(integer n, int index, int new_digit) {
integer p = 1;
integer changed = 0;
Line 243 ⟶ 241:
// returns true if n unprimeable
bool unprimeable(const sieve_of_eratosthenes& sieve, integer n) {
if (sieve.is_prime(n))
return false;
int d = count_digits(n);
for (int i = 0; i < d; ++i) {
for (int j = 0; j <= 9; ++j) {▼
▲ for (int j = 0; j <= 9; ++j)
integer m = change_digit(n, i, j);
if (m != n && sieve.is_prime(m))
Line 260 ⟶ 255:
}
int main() {
const integer limit = 10000000;
sieve_of_eratosthenes sieve(limit);
Line 272 ⟶ 266:
integer n = 100;
integer lowest[10] = { 0 };
for (int count = 0, found = 0; n < limit && (found < 10 || count < 600); ++n) {
if (unprimeable(sieve, n)) {
if (
if (count != 0)
std::cout << ", ";
Line 286 ⟶ 277:
std::cout << "\n600th unprimeable number: " << n << '\n';
int last_digit = n % 10;
if (lowest[last_digit] == 0) {
lowest[last_digit] = n;
++found;
|