2017-07-14 45 views
1
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,例如给出:总理分解给予重复在JS

2^2 
3^2 
5^2 
6^2 

的前三行是准确的,但6^2仅有的2和3的重复怎样使6^2不显示,以及解决其他类似的问题,如输入1000时给出的额外25个?

P.S.我意识到这段代码需要做的工作超出必要,但我仍然宁愿让它工作或多或少,而不是完全用其他方法替代它。

+0

你的代码有其他错误,除此之外重复。尝试获得10个因子。它给2,而不是2和5 –

回答

2

您正在通过做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);

+0

尝试获得10的因子。它只给出了2。它仍然是错误的 –

+1

@AlbertoTrindadeTavares,很好的捕获。查看修正后的版本。 – VHS

+0

现在它正在工作:) –