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 site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Dacă aveți întrebări sau nevoie de asistență suplimentară, nu ezitați să ne contactați. Ne vedem curând și nu uitați să ne adăugați la marcaje!