project-euler

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

Euler_50.cpp (1657B)


      1 #include <numeric>
      2 
      3 #include "Euler.h"
      4 
      5 int Euler::ConsecutivePrimeSum()
      6 {
      7     std::vector<int> primes = EulerUtility::getPrimesUnderCeiling(1000000);
      8     std::vector<int> primes2 = EulerUtility::getPrimesUnderCeilingIndexed(1000000);
      9 
     10     int highestPotential = 0;
     11 
     12     for (int i = 0; i < 600; ++i)
     13     {
     14         int potentialPrime = std::accumulate(primes.begin(), primes.begin() + 600 - i, 0);
     15 
     16         if (potentialPrime < 1000000)
     17         {
     18             if (potentialPrime == primes2[potentialPrime])
     19             {
     20                 highestPotential = potentialPrime;
     21                 int greatestLength = 600 - i;
     22 
     23                 for (int j = 1; ; ++j)
     24                 {
     25                     bool firstPass = true;
     26 
     27                     for (int k = 1; ; ++k)
     28                     {
     29                         potentialPrime = std::accumulate(primes.begin() + j, primes.begin() + 600 - i + j + k, 0);
     30 
     31                         if (potentialPrime < 1000000)
     32                         {
     33                             if ((potentialPrime == primes2[potentialPrime]) && (600 - i + k > greatestLength))
     34                             {
     35                                 highestPotential = potentialPrime;
     36                                 greatestLength = 600 - i + k;
     37                             }
     38 
     39                             firstPass = false;
     40                         }
     41                         else
     42                         {
     43                             if (firstPass)
     44                                 return highestPotential;
     45 
     46                             break;
     47                         }
     48                     }
     49                 }
     50             }
     51         }
     52     }
     53 
     54     return 0;
     55 }