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 }