2016-09-20 8 views
-8

与えられた整数の素因数分解を与えるコードを書こうとしています。C++での整数の素因数分解

#include <iostream> 
#include <cmath> 

using namespace std; 

void primefactor(int a); 

int main() 
{ 
    int n; 
    cout<<" Enter the value of n "<<endl; 
    cin>>n; 
    primefactor(n); 
    return 0; 
} 

void primefactor(int a){ 
    while(a%2==0){ 
     cout<<"2*"; 
     a/=2; 

    for(int i=3; i<=sqrt(a); i+=2){ 
     while(a%i==0){ 
      cout<<i<<"*"; 
      a=a/i; 
     } 
    } 
    if(a>2){ 
     cout<<a<<endl; 
    } 

} 

私は最後の要因で出力を実行したときしかし、私は、因数分解に*追加を取得しています: はここに私のコードです。これをどうやって削除できますか?

+2

あなたは「もしあなた」について知っていますか?また、あなたの質問のタイトルはあなたの実際の質問とは関係ありません。 –

答えて

0

あなたは

if (a != 2) 
    cout<<"2*"; 
else 
    cout<<"2"; 

代わりのcout<<"2*";

0

を使用することができ、私は同じ問題を持っていたし、後藤文でそれを解決しました。

#include <iostream> 
#include <math.h> 

using namespace std; 

void primeFactorization(int number) { 

cout << number << ": "; 

// WHILE number is even 
while (number % 2 == 0) { 
    // SET number = number/2 
    number = number/2; 
    // PRINT 2 
    cout << 2 << " " ; 
    // END WHILE 
} 
// GOTO TERMINAL 
reloop: 
// FOR factor in 3 to the sqrt(number), by 2 
for (int factor = 3; factor <= sqrt(number); factor = factor + 2) { 
    // IF number modular factor equals 0 THEN 
    if (number % factor == 0) { 
    // PRINT factor 
     cout << factor << " " ; 
    // SET number = number/factor 
     number = number/factor; 
    // GOTO INITIAL 
     goto reloop; 
    // END IF 
    } 
    // END FOR 
} 
//IF number > 2 THEN 
if (number > 2) { 
    //PRINT number 
    cout << number; 
    //END IF 
} 
cout << endl; 
} 

int main() { 

int usersNumber; 
bool userWants2Play = true; 

while (userWants2Play) { 

cout << "Please enter a number to be factored: " ; 
cin >> usersNumber; 

primeFactorization(usersNumber); 

    cout << "Do you want to play again? 1 or 0: " ; 
    cin >> userWants2Play; 
} 

return 0; 
} 

後藤文は再びループを通過するために、新しい奇数が可能になります。これにより、奇数の素因数が出力され、その要素が存在する場合には、新しい古い数値を再因数分解することができます。

これが手伝ってくれたら教えてください!私はエラーがないと思う。

関連する問題