题目
一个毕达哥拉斯三元组是一个包含三个自然数的集合, a<b<c ,满足条件:
a2+b2=c2
例如: 32+42=9+16=25=52
已知存在并且只存在一个毕达哥拉斯三元组满足条件 a+b+c=1000 。
找出该三元组中 abc 的乘积。
解题方法
此题的关键就是a,b和c的取值上界,c可以由a和b确定,所以只要计算a和b的上界即可。
因为
a<b<c
,所以
a<[10003]
,
[N]
代表取整运算,对于正数来说,即舍去小数部分,如
[1.66]=1
,对于负数来说,取整运算是获得不大于N的最大整数,如
[−1.6]=−2
。
又因为
a<b<c
,所以当a确定后,
a<b<1000−a2
。
c=1000−a−b
程序
public static void solve() {
for (int a=1;a<333;a++) {
for (int b=a+1;b<(1000-a)/2;b++){
int c = 1000-a-b;
if (a*a+b*b==c*c){
System.out.println(a*b*c);
break;
}
}
}
}