2520是最小的可以除以1-10所有数没有余数的数
求一个可以被1-20均分的所有数,方法优化后,给一个数组,得出最小可以均分所有数的数
function numsFn (arr) {
let primeArr = [], res = 1;
function isPrime (num) { // 判断是否为质数
if (num < 2) {
return false;
} else if (num === 2) {
return true;
} else if (num % 2 === 0) {
return false
}
let sq = Math.sqrt(num);
for (let i = 3; i < sq; i+=2) {
if (num % i === 0) {
return false;
}
}
return true;
}
function minPrime (num) { // 求最小质因子
for (let i = 2; 2 < num; i++) {
if (num % i === 0) {
return i;
}
}
return num;
}
for (let i in arr) {
if (isPrime(arr[i])) {
let item = arr.splice(i, 1);
primeArr = [...primeArr, ...item];
}
}
for (let i in primeArr) {
res *= primeArr[i];
}
for (let i in arr) { // 遍历剩余的非质数数组
// 如果可以整除非质数,则什么都不做,不可整除时乘以该数的最小质因子(循环)
while (res % arr[i] !== 0) {
res *= minPrime(arr[i]);
}
}
return res;
}