2016-09-20 3 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

Вы знаете о 'if' вы? Также название вопроса не имеет никакого отношения к вашему фактическому вопросу. –

ответ

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; 
} 

Гото утверждение позволяет новое нечетное число, чтобы снова пройти через петлю. Это позволяет печатать нечетные первичные факторы и позволяет снова заново пересчитывать новый старый номер, если существует фактор.

Дайте мне знать, если это поможет! Я думаю, что это бесплатно.

Смежные вопросы