Project Euler#9有更快的方法吗?

时间:2017-05-14 17:06:02

标签: javascript algorithm

我的解决方案(使用Javascript):

for(var a=1; a<333; a++) {
  var b = Math.floor(1000 * (a-500) / (a-1000));
  var c = 1000-a-b;
  (a*a+b*b===c*c && b>0) && console.log(a*b*c);
}

可以找到问题here。找到一个* b * c,其中a + b + c = 1000,a,b和c是毕达哥拉斯三元组。

我的代码可以找到here。我的解决方案只循环一个变量多达333次,而不是带有嵌入式for循环的解决方案,或者带有一个for循环的解决方案和一个while循环来计算使用平方根的三重here

理由如下:

给出a + b + c = 1000并且a,b和c形成毕达哥拉斯三重。由此得出&lt; b&lt; c,因此a的最大值为333.另外,由于a ^ 2 + b ^ 2 = c ^ 2,c = sqrt(a ^ 2 + b ^ 2)。将该等式与c = 1000-a-b相结合,可以消除c,产生等式b=1000(a-500)/(a-1000)

Math.floor()用于消除b为小数的情况(因此c也是小数)。 b> 0检查显然是为了确保b不是负数。

有更快的方法吗?

0 个答案:

没有答案