传入参数为长度为2的数组,求出数组范围内所有元素的最小公倍数
function smallestCommons(arr) {
//判断是否为质数
var isPrime = function(n){
for(var i=2;i<n;i++){
if(n%i===0) return false;
}
return true;
};
//分解为质因数
var getPrime = function(n){
var result=[],primes=[];
for(var i=2;i<=n;i++){
if(isPrime(i)) primes.push(i);
}
while(!isPrime(n)){
for(i=0;i<primes.length;i++){
if(n%primes[i]===0){
n = n/primes[i];
result.push(primes[i]);
break;
}
}
}
result.push(n);
return result;
};
var primes=[];
var begin = Math.min(arr[0],arr[1]);
var end = Math.max(arr[0],arr[1]);
//提取每个数的质因数
for(var i=begin;i<end+1;i++){
primes.push(getPrime(i));
}
//找出公共质因数
var public_primes=[];
for(i=0;i<primes.length;i++){
for(var j=0;j<primes[i].length;j++){
public_primes.push(primes[i][j]);
//将之后数组中的相同质因数删除
for(var k=i+1;k<primes.length;k++){
if(primes[k].indexOf(primes[i][j])!==-1){
primes[k].splice(primes[k].indexOf(primes[i][j]),1);
}
}
}
}
var result=1;
for(i=0;i<public_primes.length;i++){
result*=public_primes[i];
}
return result;
}