Fcc找出能被给定的两个参数和参数之间所有连续数字整除的最小公倍数。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fcc找出能被给定的两个参数和参数之间所有连续数字整除的最小公倍数。相关的知识,希望对你有一定的参考价值。
原题代码如下:
function smallestCommons(arr) { return arr; } smallestCommons([1,5]);
最小公倍数的参考资料:https://www.mathsisfun.com/least-common-multiple.html。
因为参数不一定是从小到大排序的,所以需要先对参数做一个排序:
arr=arr.sort();
然后需要了解到的是如何求最小公倍数, 通过查询资料了解到最小公倍数的求法,A,B两个数的最小公倍数公式:A*B/gcd(A,B的最大公约数)。
有了这个算法,只需要要对连续数字头两个进行求最小公倍数,然后再把这个值和下一个数字求最小公倍数,遍历到最大参数即可。
var num=arr[0]; for(var i=arr[0]+1;i<=arr[1];i++){ num*=i/gcd(i,num); }
现在我们还缺的是如何求最大公约数, 需要使用的公式是欧几里德定律。
function gcd(m,n){ if(m%n===0){ return n; } return gcd(n,m%n); }
完整代码如下:
function smallestCommons(arr) { arr=arr.sort(); var num=arr[0]; for(var i=arr[0]+1;i<=arr[1];i++){ num*=i/gcd(i,num); } return num; } function gcd(m,n){ if(m%n===0)return n; return gcd(n,m%n); } smallestCommons([1,5]);
以上是关于Fcc找出能被给定的两个参数和参数之间所有连续数字整除的最小公倍数。的主要内容,如果未能解决你的问题,请参考以下文章
js-找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。
找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。 范围是两个数字构成的数组,两个数字不一定按数字顺序排序。