Răspuns :
Subprogram C++ :
unsigned putere(unsigned n) {
unsigned puterea_minima = 4294967295;
unsigned puterea_curenta;
unsigned prim_gasit = 0;
unsigned curent = 2;
while (n != 1) {
puterea_curenta = 0;
while (n % curent == 0) {
n /= curent;
puterea_curenta++;
}
if (puterea_curenta != 0 && puterea_curenta < puterea_minima) {
puterea_minima = puterea_curenta;
prim_gasit = curent;
}
curent++;
}
return prim_gasit;
}
Nota :
- Datorita modului in care sunt incercati divizorii se garanteaza ca cele mai mici valori vor fi testate (si gasite) primele, deci nu va fi nevoie de test suplimentar in cazul in care puterea_curenta == puterea_minima
- Pentru ca mereu impartim n la valoarea curenta in caz de divizibilitate si pentru ca incepem verificarea de la cele mai mici valori se garanteaza ca daca n%curent==0 atunci curent este prim
- 4294967295 este valoarea maxima stocabila intr-un unsigned int
Vă mulțumim că ați vizitat platforma noastră dedicată Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, vă rugăm să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la lista de favorite!