我的解决方案(使用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不是负数。
有更快的方法吗?