Euler_77.cpp (674B)
1 #include <algorithm> 2 3 #include "Euler.h" 4 5 int primeSumRecurse(int n, int max, std::vector<int> &primes) 6 { 7 int sum = 0; 8 9 for(uint64_t i = max; i < primes.size(); i++) 10 { 11 if (n - primes[i] == 0) 12 ++sum; 13 if (n - primes[i] > 0) 14 sum += primeSumRecurse(n - primes[i], i, primes); 15 } 16 17 return sum; 18 } 19 20 int Euler::PrimeSummations() 21 { 22 int ceiling = 1000; 23 std::vector<int> primes = EulerUtility::getPrimesUnderCeiling(ceiling); 24 std::reverse(primes.begin(), primes.end()); 25 26 int n = 0; 27 int i = -1; 28 29 while (n <= 5000) 30 { 31 ++i; 32 n = primeSumRecurse(i, 0, primes); 33 } 34 35 return i; 36 }