我创建了一个小程序来接收一个数组,然后尝试为给定数组中的每个数字返回一个由质数因数组成的数组。我想我已经非常接近它了,现在它似乎重复了质数因子(即对于数字21,它返回"3,7,7,7,7,7")。我更喜欢它只返回每个质数因子一次(即对于21,它将返回"3,7")。我相信这可能只是一个小小的调整。此外,如果任何人对尝试实现这一目标的另一种方法有任何意见,或者对清理代码有任何建议。目前,我似乎对我的方法有点非正统。谢谢!
var testArray = [3, 4, 5, 6, 21, 45, 101, 567, 30, 10];
var finalArray = [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[]
];
factors(testArray, finalArray);
function factors(arr, emptyArr){
for (var x = 0; x < arr.length; x++){
for (y = 2; y < arr[x]; y++){
if (arr[x] % y !== 0){
continue;
}
for (i = 2; i < y; i++){
if (y % i !== 0){
emptyArr[x].push(y);
}
}
}
}
}
console.log(finalArray[4]);
发布于 2021-07-16 11:22:02
一种不同的方法:
function primeFactor(n) {
let factors = [];
let divisor = 2;
while (n >= 2) {
if (n % divisor == 0) {
factors.push(divisor);
n = n / divisor;
} else {
divisor++;
}
}
return factors;
}
var testArray = [3, 4, 5, 6, 21, 45, 101, 567, 30, 10];
var finalArray = [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[]
]
testArray.forEach((num, i) => {
primeFactor(num).forEach((el) => {
finalArray[i].push(el)
})
finalArray.push()
})
console.log(finalArray)
发布于 2021-07-16 13:28:01
const trialDivision = value => {
const primeFactors = [];
let f = 2;
let n = value;
while (n > 1) {
if (n % f === 0) {
if (!primeFactors.includes(f)) {
primeFactors.push(f);
}
n = n / f;
} else {
f++;
}
}
return primeFactors;
};
const testArray = [3, 4, 5, 6, 21, 45, 101, 567, 30, 10];
const finalArray = testArray.map(trialDivision);
console.log(finalArray);
https://stackoverflow.com/questions/68402899
复制相似问题