示例#1
0
        /*
         * 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)));
        }
示例#2
0
 public long GetFirstWithNumbersOfDivisors(long above)
 {
     foreach (var nextTriangularNumber in TriangleNumber.Iterastor())
     {
         var allUniqueDivisors = Divisors.GetAllUniqueDivisorsIn(nextTriangularNumber);
         if (allUniqueDivisors.Count > above)
         {
             return(nextTriangularNumber);
         }
     }
     return(-1);
 }