var userNumber = parseInt(prompt("What number would you like to have factored?"));
var factoring = function(n) {
var m = n;
var o = n;
for(i = 2; i < n/2; i++) {
if (m % i === 0 && o % i === 0) {
var p = 0;
while (n % i === 0) {
n = n / i;
p++;
}
n = m;
o = o / i;
if (p > 1) {
console.log(i + "^" + p);
}
else {
console.log(i);
}
}
else {}
}
};
factoring(userNumber);当我给上面的代码输入一个很大且相对复杂的输入时,它给出了错误的答案。例如,900可以提供:
2^2
3^2
5^2
6^2前三行是正确的,但6^2只是2和3的重复。我如何使6^2不显示,以及解决其他类似的问题,如输入1000时给出的额外25?
附注:我知道这段代码需要更多的工作,但我仍然宁愿让它或多或少地按原样工作,而不是完全用其他方法替换它。
发布于 2017-07-15 03:48:22
您可以通过执行n=m;将n重置为其原始值。这就是为什么你得到非素数因子的原因。而且,你也不需要o。另外,你需要运行你的外部循环直到m/2 + 1,而不仅仅是直到m/2。
var userNumber = parseInt(prompt("What number would you like to have factored?"));
var factoring = function(n) {
var m = n;
var o = n;
for(i = 2; i < m/2 + 1; i++) {
if (n % i === 0) {
var p = 0;
while (n % i === 0) {
n = n / i;
p++;
}
if (p > 1) {
console.log(i + "^" + p);
}
else {
console.log(i);
}
}
else {}
}
};
factoring(userNumber);
https://stackoverflow.com/questions/45110492
复制相似问题