Euler_65.cpp (1244B)
1 #include <numeric> 2 3 #include "Euler.h" 4 5 std::vector<BigInteger> recurseFraction2(std::vector<BigInteger> period, BigInteger n, std::vector<BigInteger> fraction) 6 { 7 if (n > period.size() - 1) 8 return fraction; 9 10 std::swap(fraction[0], fraction[1]); 11 12 fraction[0] = (fraction[1] * period[period.size() - n.toInt() - 1]) + fraction[0]; 13 14 return recurseFraction2(period, n + 1, fraction); 15 } 16 17 std::vector<BigInteger> recurseFraction2(std::vector<BigInteger> period, BigInteger n) 18 { 19 std::vector<BigInteger> fraction; 20 21 fraction.push_back(period[period.size() - 1]); 22 fraction.push_back(1); 23 24 return recurseFraction2(period, 1, fraction); 25 } 26 27 BigInteger periodiuy() 28 { 29 std::vector<BigInteger> period; 30 31 period.push_back(2); 32 33 int n = 2; 34 35 for (int i = 1; i < 100; ++i) 36 { 37 if (i % 3 == 2) 38 { 39 period.push_back(n); 40 n += 2; 41 } 42 else 43 { 44 period.push_back(1); 45 } 46 } 47 48 49 std::vector<BigInteger> approx = recurseFraction2(period, 0); 50 return approx[0]; 51 } 52 53 int Euler::ConvergentsOfE() 54 { 55 std::vector<int> digits = EulerUtility::BigIntToDigits(periodiuy()); 56 57 return std::accumulate(digits.begin(), digits.end(), 0); 58 }