project-euler

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

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 }