如何提高整数边长直角三角形发生器的效率?

时间:2015-02-26 16:48:32

标签: java

我希望减少代码的运行时间。我试图在Project Euler中解决problem 75,在那里我必须找到所有边长的整数组合,它们产生一个直角三角形,使其周长小于或等于150万。我执行此操作的代码如下。

import java.lang.Math;
public class Problem_75 {

    public static void main(String[] args) {
        int count = 0;
        double c = 0;
        for(int L = 1; L<= 1500000; L++){
            outerloop:
            for(int a = 1; a <= L-2; a++){
                for(int b = 1; b < L-a; b++){
                    c = Math.sqrt(a*a+b*b);
                    if((10*c)%10 == 0){
                        count++;
                        break outerloop;
                    }
                }
            }
        }
        System.out.println(count);
    }
}

如何减少此程序运行完成所需的时间?

1 个答案:

答案 0 :(得分:1)

嗯,这是一个项目欧拉问题....所以这应该是巨大的提示,那里有一个数学公式来解决它。在这种情况下,你正在寻找的是一种生成毕达哥拉斯三胞胎的方法。以下是几种方法:http://en.wikipedia.org/wiki/Formulas_for_generating_Pythagorean_triples

我强烈建议使用欧几里德公式或斐波那契方法,但所有这些方法似乎都是可行的。基本上,重点是避免使用嵌套的for循环并以天真的方式测试ab长度的每个组合。数学公式是要走的路。