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 }