-3

我用 Java 为 Project Euler ( http://projecteuler.net/ ) 编写代码。我对 Java 编码相当陌生,所以我只处理问题 #12,它要求您找到具有 500 多个因子的最小三角形数(例如,1+2+3+4+5)。我为它编写了代码,但由于某种原因,我的代码一直挂起:

        int factors = 0;
    long triangle = 0L;
    for(int x = 1; factors <= 500; x++){
        triangle += x;
        for(int y = 1; y<=triangle; y++){
            if(triangle%y==0){
                factors = factors + 1;
            }
        }
        if(factors > 500){
            System.out.println(triangle);
        }
        else{
            factors = 0;
        }
    }

为了篇幅的方便,我没有包括class或main。该程序没有编译时错误,但我无法弄清楚为什么它没有产生答案。

谢谢你的帮助

4

1 回答 1

3

您的程序实际上并没有挂起;这真的很低效。

由于这是一个 Project Euler 问题,我不会直接为您提供更优化的解决方案。我要告诉你的是

for(int y = 1; y<=triangle; y++){
    if(triangle%y==0){
        factors = factors + 1;
    }
}

是需要更快的部分。您实际上不需要遍历每个小于triangle. 如果triangle是数百万(例如),这会增加不必要的计算量。如何更快地获得因子的数量?

于 2013-09-27T20:00:57.957 回答