project-euler

https://projecteuler.net/
Log | Files | Refs | README

Euler_37.cpp (794B)


      1 #include "Euler.h"
      2 
      3 bool isTruncPrime(std::string &p, std::vector<int> &primes, bool left)
      4 {
      5     bool isPrime = primes[atoi(p.c_str())] != -1;
      6 
      7     if (p.size() == 1)
      8         return isPrime;
      9 
     10     std::string p_substr = p.substr(left, p.size() - 1);
     11     return (isPrime) ? isTruncPrime(p_substr, primes, left) : false;
     12 }
     13 
     14 llui Euler::TruncatablePrimes()
     15 {
     16     std::vector<int> primes = EulerUtility::getPrimesUnderCeilingIndexed(1000000);
     17     llui sum = -17; //offset, since this algo does not exclude 2, 3, 5 and 7 of which the sum is 17
     18 
     19     for (int prime : primes)
     20         if (prime != -1)
     21         {
     22             std::string p = std::to_string(prime);
     23             if (isTruncPrime(p, primes, true) && isTruncPrime(p, primes, false))
     24                 sum += prime;
     25         }
     26 
     27     return sum;
     28 }