小编典典

欧拉项目问题3帮助

algorithm

我正在尝试通过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();
    }

阅读 282

收藏
2020-07-28

共1个答案

小编典典

对于初学者,而不是从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.
2020-07-28