// Additive primes: Primes that the sum of digits is also prime
#include <stdio.h>
#include <stdbool.h>
bool isPrime(unsigned int n) {
if (n < 2)
return false;
if (n % 2 == 0)
return n == 2;
if (n % 3 == 0)
return n == 3;
for (unsigned int i = 5; i * i <= n; i += 4) {
if (n % i == 0)
return false;
i += 2;
if (n % i == 0)
return false;
}
return true;
}
unsigned int sumDigits(unsigned int n) {
unsigned int sum = 0;
for (; n > 0; n /= 10)
sum += n % 10;
return sum;
}
int main() {
const unsigned int top = 500;
unsigned int count = 0;
for (unsigned int n = 1; n < top; ++n) {
if (isPrime(sumDigits(n)) && isPrime(n)) {
printf("%3d", n);
if (++count % 10 == 0)
printf("\n");
else
printf(" ");
}
}
printf("\n\nTotal additive primes = %d", count);
return 0;
}
/*
run:
2 3 5 7 11 23 29 41 43 47
61 67 83 89 101 113 131 137 139 151
157 173 179 191 193 197 199 223 227 229
241 263 269 281 283 311 313 317 331 337
353 359 373 379 397 401 409 421 443 449
461 463 467 487
Total additive primes = 54
*/