首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回每个数字的质数因数数组

返回每个数字的质数因数数组
EN

Stack Overflow用户
提问于 2021-07-16 11:00:48
回答 2查看 139关注 0票数 0

我创建了一个小程序来接收一个数组,然后尝试为给定数组中的每个数字返回一个由质数因数组成的数组。我想我已经非常接近它了,现在它似乎重复了质数因子(即对于数字21,它返回"3,7,7,7,7,7")。我更喜欢它只返回每个质数因子一次(即对于21,它将返回"3,7")。我相信这可能只是一个小小的调整。此外,如果任何人对尝试实现这一目标的另一种方法有任何意见,或者对清理代码有任何建议。目前,我似乎对我的方法有点非正统。谢谢!

代码语言:javascript
复制
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]);

EN

回答 2

Stack Overflow用户

发布于 2021-07-16 11:22:02

一种不同的方法:

代码语言:javascript
复制
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)

票数 0
EN

Stack Overflow用户

发布于 2021-07-16 13:28:01

Trial division

代码语言:javascript
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68402899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档