project-euler

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

Euler_58.cpp (591B)


      1 #include "Euler.h"
      2 
      3 ll Euler::SpiralPrimes()
      4 {
      5     ll n = 8, d = 13, i = 26, count = 7, topRight = 31;
      6     int mod3 = -1;
      7 
      8     while ((n / (double)d) * 100 >= 10)
      9     {
     10         topRight += i;
     11         count += 2;
     12         d += 4;
     13         i += 8;
     14         mod3 = (mod3 + 1) % 3;
     15 
     16         if (EulerUtility::isPrime(topRight + count - 1, 5))
     17             ++n;
     18 
     19         if (mod3 != 0)
     20             if (EulerUtility::isPrime(topRight, 5))
     21                 ++n;
     22 
     23         if (mod3 != 1)
     24             if (EulerUtility::isPrime(topRight + (count * 2) - 2, 5))
     25                 ++n;
     26     }
     27 
     28     return count;
     29 }