public double GetLongestConsecutivePrimeSum(int upto) { var primes = _eSieve.GetPrimes(upto).ToArray(); var maxSequence = 0; int maxSequencePrime = 0; // http://www.mathblog.dk/project-euler-50-sum-consecutive-primes/ var primeSums = GetPrimeSums(primes); for (int i = 0; i < primes.Length - 1; i++) { for (int j = 2; j <= primes.Length; j++) { int sum = primeSums[j] - primeSums[i]; if (sum > upto) { break; } int rangeCount = j - i; if (maxSequence < rangeCount && Array.BinarySearch(primes, sum) >= 0) { maxSequence = rangeCount; maxSequencePrime = sum; } } } return(maxSequencePrime); }
public void Run() { foreach (int prime in eSieve.GetPrimes(56003)) { int length = DigitsCount(prime); } }
public string Run() { foreach (int prime in sieve.GetPrimes(1487)) { int prime2 = prime + STEP; int prime3 = prime + 2 * STEP; if (sieve.IsPrime(prime2) && sieve.IsPrime(prime3)) { List <int> digits1 = GetDigits(prime).ToList(); digits1.Sort(); List <int> digits2 = GetDigits(prime2).ToList(); digits2.Sort(); List <int> digits3 = GetDigits(prime3).ToList(); digits3.Sort(); bool isDesiredNumber = true; for (int i = 0; i < digits1.Count; ++i) { if (digits1[i] != digits2[i] || digits2[i] != digits3[i] || digits1[i] != digits3[i]) { isDesiredNumber = false; break; } } if (isDesiredNumber) { return(prime.ToString() + prime2.ToString() + prime3.ToString()); } } } return(string.Empty); }
public int Run(int maxNumber) { ESieve eSieve = new ESieve(maxNumber); int[] primes = eSieve.GetPrimes().ToArray(); long[] primeSum = CalculateSums(primes).ToArray(); int maxLength = -1; int desiredPrime = -1; int i = 0; while (i < primeSum.Length) { for (int j = i - (maxLength + 1); j >= 0; --j) { if (primeSum[i] - primeSum[j] > maxNumber) { break; } int sugestedPrime = (int)(primeSum[i] - primeSum[j]); if (Array.BinarySearch(primes, sugestedPrime) > -1) { maxLength = i - j; desiredPrime = sugestedPrime; } } i++; } return(desiredPrime); }
public int Run() { foreach (int prime in sieve.GetPrimes()) { if (_checkedPrimes.Contains(prime)) { continue; } CheckCircularPrime(prime); } return(_circularPrimes.Count()); }
public int Run() { int minSum = int.MaxValue; foreach (int firstPrime in eSieve.GetPrimes()) { if (firstPrime * 5 > minSum) { break; } foreach (int secondPrime in eSieve.GetPrimes(firstPrime)) { if (firstPrime + secondPrime * 4 > minSum) { break; } if (!MakePrimes(firstPrime, secondPrime)) { continue; } foreach (int thirdPrime in eSieve.GetPrimes(secondPrime)) { if (firstPrime + secondPrime + thirdPrime * 3 > minSum) { break; } if (!MakePrimes(thirdPrime, secondPrime) || !MakePrimes(thirdPrime, firstPrime)) { continue; } foreach (int fourthPrime in eSieve.GetPrimes(thirdPrime)) { if (firstPrime + secondPrime + thirdPrime + fourthPrime * 2 > minSum) { break; } if (!MakePrimes(fourthPrime, thirdPrime) || !MakePrimes(fourthPrime, secondPrime) || !MakePrimes(fourthPrime, firstPrime)) { continue; } foreach (int fifthPrime in eSieve.GetPrimes(fourthPrime)) { if (firstPrime + secondPrime + thirdPrime + fourthPrime + fifthPrime > minSum) { break; } if (!MakePrimes(fifthPrime, fourthPrime) || !MakePrimes(fifthPrime, thirdPrime) || !MakePrimes(fifthPrime, secondPrime) || !MakePrimes(fifthPrime, firstPrime)) { continue; } int sum = firstPrime + secondPrime + thirdPrime + fourthPrime + fifthPrime; if (minSum > sum) { minSum = sum; } } } } } } return(minSum); }
public PrimeSummations() { _primeNumbers = _eSieve.GetPrimes(PRIME_COUNT).ToList(); }
public void TestGeneratingPrimes(int upto, int[] expected) { int[] actual = _sut.GetPrimes(upto).ToArray(); Assert.True(expected.SequenceEqual(actual)); }