Documente Academic
Documente Profesional
Documente Cultură
Descrierea algoritmului
- se porneşte de la primul factor prim posibil, 2;
- cât timp numărul dat este diferit de 1, se execută operaţiile:
o se inițializează puterea factorului cu 0.
o cât timp numărul se împarte exact la un factor prim
se execută împărţirea și se modifică puterea la care apare factorul;
o dacă factorul apare la o putere diferită de 0 atunci
se afișează factorul și puterea sa.
o se trece la următorul factor prim
Implementarea în C++
............................................// biblioteci, namespace
...................................... //fisier de intrare
...................................... //fisier de iesire
int n, d, p; //declaratii
int main()
{
………………. //citire n
d = 2; // primul factor prim posibil
while(n!=1) // cât timp numărul dat este diferit de 1
{
P = 0; // se inițializează puterea factorului cu 0
while(n%d == 0)// cât timp numărul se împarte exact la un factor prim
{
n = n / d;//efectuam impartirea
p = p + 1; //creste puterea factorului
} //end while(n%d==0)
if(p>0) //daca factorul apare la o putere
{
………..<<d<<”^”<<p<<”*”; //afisam factorul si puterea
} //end if
d = d +1;//trec la urmatorul factor posibil
}//end while(n!=1)
return 0;
}
1
Clasa a 5-a Descompunerea în factori primi
Aplicații
1. Din fișierul divprim.in se citește un număr natural n. Să se afișeze în fișierul divprim.out toți divizorii primi
ai lui n. Fiecare divisor va fi afișat pe un rând.
Exemplu:
divprim.in divprim.out Explicație
100 2 Divizorii primi ai lui 100 sunt 2 și 5
5
Rezolvare: se aplică algoritmul de descompunere în factori primi, iar la afișare se va afișa numai factorul (nu și
puterea sa, ca în exemplul de mai sus).
............................................// biblioteci, namespace
int main()
{
………………. //citire n
………………….; // primul factor prim posibil
……………………. // cât timp numărul dat este diferit de 1
{
.........; // se inițializează puterea factorului cu 0
........// cât timp numărul se împarte exact la un factor prim
{
………………….;//efectuam impartirea
………………..; //creste puterea factorului
} //end while
if(…………….) //daca factorul apare la o putere
{
……………………….. //afisam factorul si rand nou
} //end if
………………;//trec la urmatorul factor posibil
}//end while
return 0;
}
2. Din fișierul sumprim.in se citește un număr natural n. Să se afișeze în fișierul sumprim.out suma divizorilor
primi ai lui n.
Exemplu:
sumprim.in sumprim.out Explicație
100 7 Divizorii primi ai lui 100 sunt 2 și 5. 2+5=7
120 10 Divizorii primi ai lui 120 sunt 2, 3 și 5. 2+3+5=10
Rezolvare: se aplică algoritmul de descompunere în factori primi. O variabilă va reține suma factorilor primi.
Dacă un factor apare la o putere diferită de 0, acesta se adună la sumă. În final, se afișează suma.
............................................// biblioteci, namespace
2
Clasa a 5-a Descompunerea în factori primi
int main()
{
………………. //citire n
………………….; // primul factor prim posibil
…………………….. //valoare initiala pentru suma
……………………. // cât timp numărul dat este diferit de 1
{
.........; // se inițializează puterea factorului cu 0
........// cât timp numărul se împarte exact la un factor prim
{
………………….;//efectuam impartirea
………………..; //creste puterea factorului
} //end while
………………………. //daca factorul apare la o putere
{
……………………….. //il adun la suma
} //end if
………………;//trec la urmatorul factor posibil
}//end while
……………………… //se afiseaza suma
return 0;
}
3. Din fișierul puteri.in se citește un număr natural n. Să se afișeze în fișierul puteri.out suma puterilor
divizorilor primi ai lui n.
Exemplu:
puteri.in puteri.out Explicație
100 4 100 = 2^2*5^2. Suma puterilor factorilor primi este 4
120 5 120 = 2^3 * 3^1 * 5^1. Suma puterilor factorilor este 5
Rezolvare: se aplică algoritmul de descompunere în factori primi. O variabilă va reține suma puterilor
factorilor primi. Dacă un factor apare la o putere diferită de 0, această putere se adună la sumă. În final, se
afișează suma.