Informatică, întrebare adresată de Daniel998, 8 ani în urmă

Salutare , astazi am invatat la programare sa verificam daca un numar este prim , codul este acesta
int nr, i = 2, prim = 1;
cin >> nr;
while (i <= sqrt(nr)) {
if (nr%i == 0) {
prim = 0;
break;
}
i++;
}
if (prim == 1) {
cout << "Numarul este prim !";
}
else {
cout << "Numarul nu este prim !";
}


As vrea si eu sa stiu de ce orice numar neprim are cel putin un divizor mai mic sau egal cu radicalul numarului pe care vrem sa-l testam .
Care este gandirea matematica din spate ?


boiustef: in primul rand programul da eroare daca nr introdus este 0 sau 1, adica va da ca 0 sau 1 este prim
boiustef: referitor la logica, ea este ca numarul nr este prim daca are numai doi divizori: 1 si nr. Deci din start se considera ca prim=1 si daca se gaseste macar inca un divizor pana la sqrt(nr), deducem ca nr nu este prim
Daniel998: Asta stiam , eu ma referam la partea cu radicalul , in loc de radical as putea pur si simplu sa inlocuiesc cu variabila nr si atunci s-ar itera la nr dar evident ar fi folosite mult mai multe resurse.

Răspunsuri la întrebare

Răspuns de blockysalt
0

sunt 3 optiuni la repetitiva de verificare de numar prim

prima este sa verifici de la 2 la n; aceasta este cea mai putin eficienta din moment ce treci de cel mai mare divizor posibil al lui n (adica n/2), si nu mai are rost sa verifici daca 10 se imparte la 6 (de exemplu)

a doua optiune este sa te opresti la n/2, care, din nou, este cel mai mare divizor posibil, deci algoritmul ar avea sens

varianta cu sqrt(n) este optima pentru ca verifici cel mai mic numar de divizori. raspunsul simplu e ca daca numarul nu este prim atunci sigur va avea un divizor mai mic sau egal cu radicalul lui

verifica exemple gen 16, 21, 45 etc daca vrei sa te convingi, nu stiu sa iti explic exact

Alte întrebări interesante