我正在尝试通过Euler项目,遇到了问题03的障碍。我有一个算法可以处理较小的数字,但是问题3使用的是非常大的数字。
问题03: 13195的素数是5、7、13和29。600851475143的最大素数是多少?
这是我在C#中的解决方案,并且已经运行了将近一个小时。我不是要寻找答案,因为我确实想自己解决这个问题。主要只是在寻求帮助。
static void Main(string[] args) { const long n = 600851475143; //const long n = 13195; long count, half, largestPrime = 0; bool IsAPrime; half = n / 2; for (long i = half; i > 1 && largestPrime == 0; i--) { if (n % i == 0) { // these are factors of n count = 1; IsAPrime = true; while (++count < i && IsAPrime) { if (i % count == 0) { // does a factor of n have a factor? (not prime) IsAPrime = false; } } if (IsAPrime) { largestPrime = i; } } } Console.WriteLine("The largest prime factor is " + largestPrime.ToString() + "."); Console.ReadLine(); }
对于初学者,而不是从n / 2开始搜索,请从n的平方根开始。您将获得其中一半的因素,另一半为其补充。
例如:
n = 27 start at floor(sqrt(27)) = 5 is 5 a factor? no is 4 a factor? no is 3 a factor? yes. 27 / 3 = 9. 9 is also a factor. is 2 a factor? no. factors are 3 and 9.