function prime(number) {
var primeNumbers = [];
var numberDivide = 2;
for(var i=0; i<number; i++) {
var nice = number/numberDivide;
if(Math.floor(nice) == nice) {
number = nice;
primeNumbers.push(numberDivide);
} else {
numberDivide++
}
console.log(primeNumbers)
}
}
这是我的代码。它没有记录最终的素数,我不知道为什么。我经过并大声说出来但它没有工作......
答案 0 :(得分:0)
首先使用整数进行代码转换,以查看函数正在执行的操作:
function prime(number) {
var primeNumbers = [];
for(var divisor =2; divisor <= number;){
if( number % divisor == 0){
primeNumbers.push(divisor);
number = number/divisor;
continue;
}
++divisor;
}
return primeNumbers;
}
console.log( prime(18)); // returns [2,3,3]
此处number
被除以一个素数因子的商所取代,以查看是否可以找到超过已经确定的其他素数因子。请注意number
不断变小,dividend
在被发现是一个因素时不会增加,因此下一个循环可以测试它是否是一个多重因素。
那么循环迭代了多少次?这个版本没有对它们进行计数,但是当循环计数器(未另行使用)大于或等于{时,发布的版本停止迭代所讨论的{1}}越来越小。
number
的发布函数失败,返回[2,3]而不是[2,3,3]。如果允许再次迭代则产生正确的结果。我没有考虑预先计算循环次数,但是找到何时在发布的代码中退出循环的方法是导致问题的原因。