예제 #1
0
        public void P0012(int numDivisors, long expected)
        {
            var i = 0;
            var triangleNumber = 0L;
            var primes         = new PrimeNumberGenerator();

            while (true)
            {
                triangleNumber = Functions.TriangleNumber(++i);
                var numDivisorsSeen = Functions.NumDivisors(triangleNumber, primes);

                if (numDivisorsSeen > numDivisors)
                {
                    break;
                }
            }

            Assert.Equal(expected, triangleNumber);
        }
예제 #2
0
        public static Dictionary <long, int> Factor(long i, PrimeNumberGenerator primes)
        {
            var  result      = new Dictionary <long, int>();
            var  primesList  = primes.Primes().TakeWhile(x => x <= i).ToList();
            var  primesCount = primesList.Count();
            long p           = 0;

            for (int j = 0; j < primesCount; j++)
            {
                p = primesList[j];
                if (i % p == 0)
                {
                    result[p] = 0;
                    var i2 = i;
                    while (i2 % p == 0)
                    {
                        result[p]++;
                        i2 /= p;
                    }
                }
            }
            return(result);
        }
예제 #3
0
 public static int NumDivisors(long i, PrimeNumberGenerator primes)
 => Factor(i, primes).Values.Product(x => x + 1);