我的java代码有什么问题?项目欧拉12

时间:2013-09-27 19:14:08

标签: java

我在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;
        }
    }

为方便空间,我没有包括班级或主要。该程序没有编译时错误,但我无法弄清楚为什么它没有产生答案。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

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

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

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

是需要更快的部分。您不需要实际循环遍历小于triangle的每个数字。如果triangle是数百万(作为示例),则会增加计算所需的计算量。你怎么能更快地得到多少因素?