Euler_87.cpp (1217B)
1 #include <iostream> 2 #include <unordered_set> 3 4 #include "Euler.h" 5 6 uint64_t Euler::PrimePowerTriples() 7 { 8 //what is the upper bound? 9 //bc <<< "84^4 < 50000000" 10 //bc <<< "368^3 < 50000000" 11 //bc <<< "7071^2 < 50000000" 12 13 std::vector<int> primes = EulerUtility::getPrimesUnderCeilingIndexed(7072); 14 std::vector<uint64_t> cubes; 15 std::vector<uint64_t> fourths; 16 std::unordered_set<uint64_t> solutions; 17 18 for (uint64_t i = 0; i < 369; ++i) { 19 cubes.push_back(i * i * i); 20 if (i < 85) { 21 fourths.push_back(i * i * i * i); 22 } 23 } 24 25 for (uint64_t i = 0; i < 7072; ++i) { 26 if (primes[i] != -1) { 27 for (uint64_t j = 0; j < 369; ++j) { 28 if (primes[j] != -1) { 29 for (uint64_t k = 0; k < 85; ++k) { 30 if (primes[k] != -1) { 31 uint64_t candidate = (i * i) + cubes[j] + fourths[k]; 32 33 if (candidate < 50000000) { 34 solutions.insert(candidate); 35 } 36 } 37 } 38 } 39 } 40 } 41 } 42 43 return solutions.size(); 44 }