华为od 勾股数元组
题目描述
如果三个正整数A
、B
、C
,A² + B² = C²
则为勾股数,
如果ABC
之间两两互质,即A
与B
,A
与C
,B
与C
均互质没有公约数,则称其为勾股数元组。
请求出给定 n ~ m
范围内所有的勾股数元组。
输入描述
起始范围
1 < n < 10000
n < m < 10000
输出描述
ABC保证A < B < C
输出格式A B C
多组勾股数元组,按照A B C
升序的排序方式输出。
若给定范围内,找不到勾股数元组时,输出Na
。
输入:
1
20
输出:
3 4 5
5 12 13
8 15 17
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function gcd(a, b) {
return b == 0 ? a : gcd(b, a % b);
}
rl.on('line', line => {
const [n, m] = line.split(' ').map(Number);
let found = false;
for (let i = n; i <= m; i++) {
for (let j = i + 1; j <= m; j++) {
const k = Math.sqrt(i * i + j * j);
if (k > m) {
break;
}
if (k * k == i * i + j * j) {
if (gcd(i, j) == 1 && gcd(j, k) == 1) {
console.log(`${i} ${j} ${k}`);
found = true;
}
}
}
}
if (!found) {
console.log('Na');
}
});