public static long[] GetPrimeFactors(this long value, IPrimeProvider provider, bool makeDistinct = false) { var factors = new List <long>(4); foreach (var prime in provider.GetPrimes()) { var primeWasAdded = false; while (prime.Divides(value)) { if (!(primeWasAdded && makeDistinct)) { primeWasAdded = true; factors.Add(prime); } value /= prime; } if (value == 1) { break; } } return(factors.ToArray()); }
public PrimalityAlgorithm(IPrimeProvider provider, long greatestChecked) { _primes = provider.GetPrimes(); _greatestChecked = greatestChecked; }
// ~ 3000 ms private long SlowSolve(IPrimeProvider provider) { return(FindTheSmallestOfFourConsecutive(10.Power(6), number => number.GetUniquePrimeFactors(provider).Length)); }
public static long[] GetUniquePrimeFactors(this long value, IPrimeProvider provider) => value.GetPrimeFactors(provider, true);