diff --git a/37 b/37 new file mode 100755 index 0000000..d68fea7 Binary files /dev/null and b/37 differ diff --git a/37.c b/37.c new file mode 100644 index 0000000..76f42fa --- /dev/null +++ b/37.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include "primes.h" + +bool* primesTable; + +bool isLeftTrunc (int n) { + int digits = floor (log10 (n)) + 1; + for (int i = 1; i <= digits; i++) { + if (!primesTable[n % (int) pow (10, i)]) + return false; + } + return true; +} + +bool isRightTrunc (int n) { + while (n > 0) { + if (!primesTable[n]) + return false; + n /= 10; + } + return true; +} + +int main () { + int* primes; + int numOfPrimes = listOfPrimes (1000000, &primes, &primesTable); + // unfortunately I couldn't find a deterministic way to find + // the upper-bound of all truncatable primes... 1 mil will do + + int sum = 0; + for (int i = 0; i < numOfPrimes; i++) { + if (isLeftTrunc (primes[i]) && + isRightTrunc (primes[i]) && + primes[i] > 10) { + printf ("%d\n", primes[i]); + sum += primes[i]; + } + } + printf ("sum: %d\n", sum); +}