【问题标题】:Return an array of arrays of prime factors for each number返回每个数字的素数数组的数组
【发布时间】:2021-07-16 03:00:48
【问题描述】:

我正在创建一个小程序来接收一个数组,然后尝试为给定数组中的每个数字返回一个质因数数组。我想我非常接近拥有它,现在它似乎重复了主要因素(即对于数字 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]);

【问题讨论】:

  • 这感觉更像是一个codereview 问题,而答案反映了这一点。你应该看看那个网站。
  • @PresidentJamesK.Polk 我对堆栈溢出很陌生。 codereview 是否是网站的不同部分,具有不同的目的?请原谅我对此缺乏了解,只是不知道是否有特定的地方我应该问我的问题。如果您能详细说明 codereview 和 stackoverflow 站点之间的区别,将不胜感激!
  • 我认为 Stack Exchange 旗下有一百多个不同的站点。当您访问某个站点时,您会看到一个问号按钮,其中包含指向该站点帮助部分的链接。在那里,您将简要说明该网站的内容以及应该在那里提出哪些问题。

标签: javascript primes


【解决方案1】:

另一种方法:

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)

【讨论】:

    【解决方案2】:

    Trial division:

    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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2021-03-05
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 2014-07-30
      相关资源
      最近更新 更多