2017-07-14 17 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 

最初の3行が正確であるが、6^2はちょうど私が6^2は表示されませ作るにはどうすればよい2と3の繰り返し、同様です余分な25のような他の同様の問題を解決する1000を入力したときに?

P.S.私は、このコードが必要以上に多くの作業を必要としていることを認識していますが、他のメソッドと完全に置き換えるよりも、むしろ機能を多かれ少なかろうとしています。

+0

あなたのコードは、その繰り返しのほか、他のバグを持っています。 10要因を試してみてください。それは2と5の代わりに2を与える –

答えて

2

n=m;を実行してnを元の値にリセットしています。これがプライム以外の要素を得る理由です。また、oは必要ありません。また、m/2までだけでなく、m/2 + 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 < 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

これは動作しています:) –

関連する問題