project-euler

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

Euler_23.cpp (597B)


      1 #include <numeric>
      2 #include "Euler.h"
      3 
      4 int Euler::NonAbundantSums()
      5 {
      6     int ceiling = 28123;
      7     std::vector<int> abundantNumbers;
      8     std::vector<int> nonAbundantSums(ceiling * 2 + 1, 0);
      9 
     10     for (int i = 1; i <= ceiling; ++i)
     11     {        
     12         if(EulerUtility::sumOfDivisors(i) > 2 * i)
     13             abundantNumbers.push_back(i);
     14 
     15         nonAbundantSums[i - 1] = i;
     16     }
     17 
     18     for (int abnum : abundantNumbers)
     19         for (int abnum2 : abundantNumbers)
     20             nonAbundantSums[abnum + abnum2 - 1] = 0;
     21 
     22     return std::accumulate(nonAbundantSums.begin(), nonAbundantSums.end(), 0);
     23 }