当前位置:  开发笔记 > 编程语言 > 正文

项目欧拉问题3帮助

如何解决《项目欧拉问题3帮助》经验,为你挑选了5个好方法。

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

nickf.. 14

首先,不是在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.


Bill Barksda.. 10

虽然这个问题要求最大的素因子,但这并不一定意味着你必须首先找到那个......



1> nickf..:

首先,不是在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.



2> Bill Barksda..:

虽然这个问题要求最大的素因子,但这并不一定意味着你必须首先找到那个......



3> JesperE..:

实际上,对于这种情况,您不需要检查素数,只需删除您找到的因子.从n == 2开始向上扫描.当邪恶的大数字%n == 0时,将邪恶的大数字除以n并继续使用较小的邪恶数字.当n> = sqrt(big-evil-number)时停止.

在任何现代机器上都不应该花费超过几秒钟.



4> st0le..:
long n = 600851475143L; //not even, so 2 wont be a factor
int factor = 3; 
while( n > 1)
{
    if(n % factor == 0)
    {
        n/=factor;
    }else
        factor += 2; //skip even numbrs
}
        print factor;

这应该足够快......注意,没有必要检查素数......



5> Rob Walker..:

您需要减少正在进行的检查量...想想您需要测试的数字.

为了更好的方法阅读Erathosthenes的筛子 ......它应该让你指向正确的方向.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有