我希望减少代码的运行时间。我试图在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);
}
}
如何减少此程序运行完成所需的时间?
答案 0 :(得分:1)
嗯,这是一个项目欧拉问题....所以这应该是巨大的提示,那里有一个数学公式来解决它。在这种情况下,你正在寻找的是一种生成毕达哥拉斯三胞胎的方法。以下是几种方法:http://en.wikipedia.org/wiki/Formulas_for_generating_Pythagorean_triples
我强烈建议使用欧几里德公式或斐波那契方法,但所有这些方法似乎都是可行的。基本上,重点是避免使用嵌套的for循环并以天真的方式测试a
和b
长度的每个组合。数学公式是要走的路。