private static ulong CalculateByFactor(ulong a, ulong factors, ulong maxPrime, List<ulong> primes) { ulong sum = 0; var b = a + (ulong)factors; while (b <= maxPrime) { if (primes.BinarySearch(b) > -1) { double ratio = (double)(b + 1) / (a + 1); double nextPrime = ratio * (b + 1) - 1; if (nextPrime > maxPrime) break; ulong c = (ulong)Math.Round(nextPrime); if (primes.BinarySearch(c) > -1) { if (CheckABC(a, b, c)) sum += a + b + c; } } b += factors; } return sum; }
private static ulong CalculateByPrimes(int i, List<ulong> primes, ulong a, ulong maxPrime) { ulong sum = 0; for (int j = i + 1; j < primes.Count - 1; j++) { var b = primes[j]; double ratio = (double)(b + 1) / (a + 1); double nextPrime = ratio * (b + 1) - 1; if (nextPrime > maxPrime) break; ulong c = (ulong)Math.Round(nextPrime); if (primes.BinarySearch(c) > -1) { if (CheckABC(a,b,c)) sum += a + b + c; } } return sum; }