题目:
如果3个正整数(a,b,c)满足的关系,则称(a,b,c)为勾股数(著名的勾三股四弦五),为了探索勾股数的规律,我们定义如果勾股数(a,b,c)之间两两互质(即a与b,a与c,b与c之间均互质,没有公约数),则其为勾股数元祖(例如(3,4,5)是勾股数元祖,(6,8,10)则不是勾股数元祖)。请求出给定范围[N,M]内,所有的勾股数元祖。

解题1:
1.依次判断这三个数是否互质,将判断互质方法封装成一个函数。如果两个数有公约数,那么就返回1,这两个数不互质。
2.只要这三个数当中任意两个不互质,那么这一组数就不是勾股数元组。因此使用的是 || 运算符。
3.因为a^2+b^2=c^2 ,因此a<b<c,for循环时应该从上一个数的下一位开始遍历。
代码:
function isExistPrime(q,p) {
//判断两个数是否互质,如果互质返回0,不互质返回1
let max = (q > p) ? q : p
for(let i = 2 ; i <= max ;i++) {
if(q % i == 0 && p % i == 0) {
return 1
}
}
return 0
}
function existPrimeTri(x,y,z) {
//如果任意两个数不互质,也就是为1,那么这一组勾股数就不是元组,返回1。
if(isExistPrime(x,y) || isExistPrime(x,z) || isExistPrime(z,y)) {
return 1
}else{
return 0
}
}
function main(n,m,flag) {
for(let a = n ; a<= m; a++ ) {
for(let b = a+1; b<=m ; b++) {
for(let c = b+1; c<=m; c++) {
if(Math.pow(a,2) + Math.pow(b,2) == Math.pow(c,2) && !existPrimeTri(a,b,c)) {
console.log(`${a} ${b} ${c}`)
flag++
}
}
}
}
//flag为0说明不存在勾股数元组。
if(flag == 0) {
console.log('NA')
}
}
题解2:
对于一组素勾股数
(a,b,c),存在m、n使得 a =,b =
, c =
,也就是当存在m、n时,这一组勾股数就是勾股数元组。例如:3、4、5这一组数中,存在m=1,n=2使得上述公式都成立。
根据
,m、n大于0,则m、n一定小于c的平方。
代码:
function main(boundary) {
let res = 0
const len = Math.ceil(Math.sqrt(boundary))
for (let i = 1; i < len; i++) {
for (let j = i + 1; j < len; j++) {
// i、j不互质,跳过进行下一次循环。
if(isCoprime(i, j) !== 1) continue
let a = Math.pow(j, 2) - Math.pow(i, 2)
let b = 2 * i * j
let c = Math.pow(j, 2) + Math.pow(i, 2)
if (c <= input) {
// 勾股数任意两两互质,这里应该使用&&运算符。
if ((isCoprime(a, b) === 1) && (isCoprime(a, c) === 1) && (isCoprime(b, c) === 1)) {
// 勾股数两两互质
console.log(`${a} ${b} ${c}`)
res++
}
}
}
}
if(res == 0) {
console.log('NA')
}
}
// 判断两个数是否互质:最大公因数是否为1,如果互质,那么最终输出为1。
function isCoprime(x, y) {
if (y === 0) {
return x
} else {
return isCoprime(y, x % y)
}
}
本文参考了该博主的优质文章:华为机试练习(四)勾股数元组_下一个路口遇见你48的博客-优快云博客_勾股数元组
寻找范围内的勾股数元组
这篇博客探讨了如何在给定范围内找到勾股数元祖,即满足a^2 + b^2 = c^2且两两互质的正整数(a, b, c)。解题思路包括检查三个数的互质性,利用循环限制条件a < b < c,以及通过公式a = m^2 - n^2, b = 2mn, c = m^2 + n^2来寻找满足条件的组合。文章提供了两种不同的解题方法,并附有相应的JavaScript代码实现。"
126078221,13184539,Git基础教程:配置、初始化、日志、分支与合并,"['Git', '版本控制']
574

被折叠的 条评论
为什么被折叠?



