/* * for every divisor d of n, d+n/d is prime. */ public bool IsPrimeGenerating(long number) { if (number % 2 == 1) { return(false); } /* * for (long divisor1 = 2; divisor1 < number; divisor1++) * { * long divisor2 = number / divisor1; * if (divisor1 > divisor2) return true; * * if (number % divisor1 == 0 ) * { * * * * if (!primeDictionary.ContainsKey(divisor1 + divisor2)) return false; * } * * * } * * return true; */ List <long> divisors = Divisors.GetAllUniqueDivisorsIn(number); int len = divisors.Count(); if (len % 2 == 1) { return(false); } //if (len == 2) // return !primeDictionary.ContainsKey(number); if (number == 442) { var aa = 1; } // List<long> liste = divisors.Select(d => d + number / d).Distinct().ToList(); List <long> liste = divisors.Take(len).Select(d => d + number / d).Distinct().ToList(); // List<long> liste = divisors.Take(len/2).ToList(); // return liste.All(d => Primes.IsPrime(d, primeliste)); // return liste.All(d => primeDictionary.ContainsKey(d)); return(liste.All(d => primeDictionary.ContainsKey(d))); }
public long GetFirstWithNumbersOfDivisors(long above) { foreach (var nextTriangularNumber in TriangleNumber.Iterastor()) { var allUniqueDivisors = Divisors.GetAllUniqueDivisorsIn(nextTriangularNumber); if (allUniqueDivisors.Count > above) { return(nextTriangularNumber); } } return(-1); }