【ProjectEuler】ProjectEuler_012

// The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
// 
// 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
// 
// Let us list the factors of the first seven triangle numbers:
// 
//  1: 1
//  3: 1,3
//  6: 1,2,3,6
// 10: 1,2,5,10
// 15: 1,3,5,15
// 21: 1,3,7,21
// 28: 1,2,4,7,14,28
// We can see that 28 is the first triangle number to have over five divisors.
// 
// What is the value of the first triangle number to have over five hundred divisors?

using System;
using System.Collections.Generic;
using System.Text;

namespace projecteuler012
{
    class Program
    {
        static void Main(string[] args)
        {
            F1();
        }

        private static void F1()
        {
            Console.WriteLine(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod());
            DateTime timeStart = DateTime.Now;

            int i = 1;
            int sum = 1;
            int maxValue = 500;

            while (getFactorCount(sum) <= maxValue)
            {
                i++;
                sum += i;
            }

            Console.WriteLine(sum);
            Console.WriteLine("Total Milliseconds is " + DateTime.Now.Subtract(timeStart).TotalMilliseconds + "\n\n");
        }

        /// <summary>
        /// 获取因数的个数
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        private static int getFactorCount(long value)
        {
            if (value == 1)
            {
                return 1;
            }

            int count = 0;
            long sqrtValue = long.Parse(Math.Sqrt(value).ToString().Split('.')[0]);

            for (int i = 1; i <= sqrtValue; i++)
            {
                if (value % i == 0)
                {
                    count++;
                }
            }

            count *= 2;     //如果能被某个数除,则一定有另一个因数,是大于它的开方值的,所以因数数目应该乘以2

            if (value == sqrtValue * sqrtValue)           //如果这个数本身能开方,则加上1
            {
                count++;
            }
            return count;
        }
    }
}

/*
Void F1()
76576500
Total Milliseconds is 1086.1379

By GodMoon
*/

你可能感兴趣的:(String,list,Class,Numbers)