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 }