文章目录
- 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。 范围是两个数字构成的数组,两个数字不一定按数字顺序排序。 例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小公倍数。
- 这里涉及到经典算法:求最大公约数gcd(greatest common divisor)和最小公倍数scm(smallest common multiple) gcd(最大公约数)算法过程(欧几里德算法/辗转相除法) 有两整数a和b: ① a%b得余数c,即c=a%b ② 若c=0,则b即为两数的最大公约数 ③ 若c≠0,则a=b,b=c,再回去执行① scm算法(最小公倍数算法) 最小公倍数=两整数的乘积÷最大公约数,即scm=(a*b)/gcd(a,b)
- <script type=”text/javascript”> function smallestCommons(arr) { arr = arr.sort(function(a, b) { return a – b; }); console.log(arr); //递归求最大公约数 function gcd(a, b) { if (a % b === 0) { return b; } else { return gcd(b, a % b); } } //a,b的最小公倍数=a*b/(a和b的最大公约数) var val = arr[0]; for (var i = arr[0] + 1; i <= arr[1]; i++) { // console.log(‘val=’+val+’ i=’+i); // console.log(‘他们的最大公约数是:’+gcd(val,i)); val = val * i / gcd(val, i); // console.log(‘求公倍数后 val=’+val+’ i=’+i); } return val; } </script> ——————— 作者:kimihiro_41 原文:https://blog.csdn.net/kimihiro_41/article/details/73740067
找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。
范围是两个数字构成的数组,两个数字不一定按数字顺序排序。
例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小公倍数。
这里涉及到经典算法:求最大公约数gcd(greatest common divisor)和最小公倍数scm(smallest common multiple)
gcd(最大公约数)算法过程(欧几里德算法/辗转相除法)
有两整数a和b:
① a%b得余数c,即c=a%b
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
scm算法(最小公倍数算法)
最小公倍数=两整数的乘积÷最大公约数,即scm=(a*b)/gcd(a,b)
<script type="text/javascript">
function smallestCommons(arr) {
arr = arr.sort(function(a, b) {
return a - b;
});
console.log(arr);
//递归求最大公约数
function gcd(a, b) {
if (a % b === 0) {
return b;
} else {
return gcd(b, a % b);
}
}
//a,b的最小公倍数=a*b/(a和b的最大公约数)
var val = arr[0];
for (var i = arr[0] + 1; i <= arr[1]; i++) {
// console.log('val='+val+' i='+i);
// console.log('他们的最大公约数是:'+gcd(val,i));
val = val * i / gcd(val, i);
// console.log('求公倍数后 val='+val+' i='+i);
}
return val;
}
</script>
<script type="text/javascript">
function smallestCommons(arr) {
arr = arr.sort(function(a, b) {
return a - b;
});
console.log(arr);
//递归求最大公约数
function gcd(a, b) {
if (a % b === 0) {
return b;
} else {
return gcd(b, a % b);
}
}
//a,b的最小公倍数=a*b/(a和b的最大公约数)
var val = arr[0];
for (var i = arr[0] + 1; i <= arr[1]; i++) {
// console.log('val='+val+' i='+i);
// console.log('他们的最大公约数是:'+gcd(val,i));
val = val * i / gcd(val, i);
// console.log('求公倍数后 val='+val+' i='+i);
}
return val;
}
</script>
———————
作者:kimihiro_41
原文:https://blog.csdn.net/kimihiro_41/article/details/73740067
发表回复