这个问题的神奇之处在于,用最简单的试除法来找质因数,比任何其他方法都要快速。从小往大找上去,我们甚至于不需要事先有一个质数表。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectEuler03
{
class Program
{
static void Main(string[] args)
{
long num = 600851475143;
long remainder = num;
long maxfactor = 0;
int counter = 2;
while (counter <= Math.Sqrt(num)) // 一个合数n, 必然在 2 至 根号n,之间可以被被质分解
{
if (remainder % counter == 0)
{
Console.WriteLine(counter);
remainder = remainder / counter;
maxfactor = counter;
}
else
{
counter = counter + 1;
}
}
if (remainder > maxfactor)
{
maxfactor = remainder;
}
Console.WriteLine("最大的质因数是{0}",maxfactor);
Console.ReadLine();
}
}
}