Extinderea numărului asupra factorilor

factorizarea online


Orice număr poate fi descompus în factori de prim. Aceasta produce aceeași descompunere,
dacă am ignora ordinea factorilor de intrare.






Secvența de acțiuni care sunt realizate prin descompunerea numerelor în factori de prime în matematică:

  • Verificați pentru a vedea dacă numărul propus este prim.
  • Dacă nu, ridica, fiind ghidat de semnele de divizare, separator, de la numere simple, pornind de la cele mai mici (2, 3, 5 ...).
  • Repetați această acțiune, atâta timp cât privat nu va fi prim.

Pentru a determina primality unui număr poate fi folosit „algoritm de ciuruire Eratostene“.
Expansiunea factorilor primi o programare realizată într-un mod analog:

    • Setați valoarea inițială egală cu 2 divizor.
    • Verificați dacă numărul este împărțit la împărțitor. Dacă da, scrie o lista a factorilor din separator și împărțiți numărul de împărțitor.
    • Repetați pasul anterior până când starea de multiplicitate.
    • Du-te la următorul împărțitor (în cel mai simplu caz creștere compas 1)
    • Calculele completează când câtul devine egal cu 1.






Implementarea în C ++

#include
using namespace std;
int main ()
int n, div = 2;
cout <<"N = " ;
>> n cin;
cout < în timp ce (n> 1)
în timp ce (n% div == 0)
cout <<" * " < n = n / div;
>
div ++;
>
cin.get (); cin.get ();
return 0;
>


Dacă luăm în considerare că numărul chiar de factori prime poate fi doar 2, este posibil să se reducă numărul de cicluri în implementarea algoritmului, prin adăugarea suplimentară

#include
using namespace std;
int main ()
int n, div = 2;
cout <<"N = " ;
>> n cin;
cout < în timp ce (n> 1)
în timp ce (n% div == 0)
cout <<" * " < n = n / div;
>
if (div == 2) div ++;
altfel div + = 2;
>
cin.get (); cin.get ();
return 0;
>


factorizarea algoritm poate fi, de asemenea, implementat folosind recursivitate:

#include
using namespace std;
void find (int n, int div)
if (== 1 n) întoarcere;
if (n.iv == 0)
cout <<" * " < găsi (n / div, div);
>
altfel
if (div == 2)
găsi (n, div + 1);
altfel
găsi (n, div + 2);
>
int main ()
int n, div = 2;
cout <<"N = " ;
>> n cin;
cout < găsi (n, 2);
cin.get (); cin.get ();
return 0;
>