project-euler

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

Euler_70.cpp (656B)


      1 #include <algorithm>
      2 
      3 #include "Euler.h"
      4 
      5 int Euler::TotientPermutation()
      6 {
      7     std::vector<int> primes = EulerUtility::getPrimesUnderCeiling(1e7);
      8     std::vector<int> primesIndexed = EulerUtility::getPrimesUnderCeilingIndexed(1e7);
      9     double NoverPhi = 1e8, n = 0;
     10 
     11     for (double i = 2; i <= 1e7; ++i)
     12     {
     13         int p = EulerUtility::phi(i, primes, primesIndexed);
     14 
     15         std::vector<int> digits = EulerUtility::intToDigits(i);
     16 
     17         if ((std::is_permutation(digits.begin(), digits.end(), EulerUtility::intToDigits(p).begin())) && (NoverPhi > i / p))
     18         {
     19             NoverPhi = i / p;
     20             n = i;
     21         }
     22     }
     23 
     24     return n;
     25 }