Euler_49.cpp (1370B)
1 #include <algorithm> 2 3 #include "Euler.h" 4 5 std::string Euler::PrimePermutations() 6 { 7 std::vector<int> primes = EulerUtility::getPrimesUnderCeiling(10000); 8 std::vector<std::vector<std::string>> primePermutations; 9 10 for (int p : primes) 11 { 12 if (p >= 1000) 13 { 14 bool isUniquePermutation = true; 15 std::string s = std::to_string(p); 16 17 for (uint64_t i = 0; i < primePermutations.size(); ++i) 18 { 19 if (std::is_permutation(primePermutations[i][0].begin(), primePermutations[i][0].end(), s.begin())) 20 { 21 isUniquePermutation = false; 22 primePermutations[i].push_back(s); 23 } 24 } 25 26 if (isUniquePermutation) 27 primePermutations.push_back(std::vector<std::string>(1, s)); 28 } 29 } 30 31 primePermutations[48] = std::vector<std::string>(); 32 33 for (std::vector<std::string> pp : primePermutations) 34 if (pp.size() > 2) 35 for (uint64_t i = 0; i < pp.size() - 2; ++i) 36 for (uint64_t j = i + 1; j < pp.size() - 1; ++j) 37 for (uint64_t k = j + 1; k < pp.size(); ++k) 38 if ((atoi(pp[j].c_str()) * 2) - atoi(pp[i].c_str()) == atoi(pp[k].c_str())) 39 return pp[i] + pp[j] + pp[k]; 40 41 return nullptr; 42 }