online: 1; azi: 1; total: 50456 Manual clasa a ix a - Implementarea algoritmilor - Instructiuni de control

Probleme Rezolvate



Manual clasa a IX a

Implementarea algoritmilor

Instructiuni de control

Se citesc mai multe numere naturale până se citeşte un număr negativ . Afişaţi ultimul număr care are cei mai puţini divizori primi .
# include < iostream >
# include < cmath >
using namespace std ;
int main () {
int n;
int min_div = 999999 ; // initializam cu un numar mare, sa ne asiguram ca il actualizam la primul numar citit
int last_num = -1 ; // initializam cu o valoare invalida, sa ne asiguram ca il actualizam la primul numar citit
while ( true ) {
cin >> n;
if (n < 0 ) {
break ; // am citit numarul negativ, iesim din bucla
}
// calculam numarul de divizori primi
int div_count = 0 ;
int d = 2 ;
int sqrt_n = sqrt (n);
while (d <= sqrt_n ) {
if (n % d == 0 ) {
div_count ++;
n /= d;
sqrt_n = sqrt (n);
} else {
d++;
}
}
if (n > 1 ) {
div_count ++;
}
// actualizam min_div si last_num , daca e cazul
if ( div_count < min_div ) {
min_div = div_count ;
last_num = n;
}
}
cout << last_num << endl ;
return 0 ;
}

Pentru a rezolva această problemă, vom utiliza o variabilă min_div pentru a reține numărul minim de divizori primi găsit până acum și o variabilă last_num pentru a reține ultimul număr care are acel număr minim de divizori primi. Vom itera prin numerele citite până când se va citi un număr negativ. Pentru fiecare număr citit, vom calcula numărul său de divizori primi și îl vom compara cu min_div . Dacă găsim un număr cu mai puțini divizori primi decât min_div , vom actualiza valorile min_div și last_num . La finalul iterației, vom afișa last_num .
Pentru a calcula numărul de divizori primi ai unui număr, vom itera de la 2 la radicalul numărului și, dacă găsim un divizor, vom împărți numărul la acel divizor până când nu mai poate fi împărțit și vom trece la următorul divizor. Dacă la final numărul este mai mare decât 1, înseamnă că avem un ultim divizor prim care nu a fost luat în considerare și trebuie să îl adăugăm la contorul de divizori primi.