Divizorii unui numar
Vizualizari 20
Postat vineri, 4 iulie 2025
In primul rand, ca sa raspundem la intrebarea, "care sunt divizorii unui numar", trebuie sa definim ce este acela un divizor:
Pe scurt, un divizor este un numar, care divide exact un alt numar intreg, x. Ne gandim la numerele pare, care toate au ca divizor numarul 2.
In al doilea rand, trebuie sa facem observatia ca cel mai mare divizor propriu al oricarui numar x v-a fi chiar jumatatea sa. (ex: 18 este cel mai mare divizor al lui 36). Asa ca, putem stabilii ca toti divizorii vor fi neaparat intre 2 si x/2 inclusiv.
Deasemenea, ca sa aflam toti divizorii, (cei proprii si cei improprii), trebuie sa luam si pe 1 si numarul insine.
Asa ca, daca vrem, ca exemplu, sa aflam suma divizoriilor unui numar x, putem initializa suma cu x/2 + 1, iar apoi sa aflam restul divizoriilor.
Cum? Simplu, folosim operatorul mod (%). Acesta reprezinta restul impartirii primului termen la al doilea.
Cunoastem teorema împărțirii cu rest deimpartit = impartior * cat + rest. O putem aplica in cazul nostru ca sa intelegem mai bine ce face acest operator. Luam ca exemplu
16 mod 2
Rezultatul v-a fi restul impartirii lui 2 la 16 (16 / 2), care este 0. (Pentru ca 8 * 2 = 16). Daca verificam faptul ca rezultatul este egal cu 0, putem verifica daca 16 este par sau nu. if(16 mod 2 == 0)
Divizorii unui numar in C++
#includeint main() { int n; std :: cin >> n; for(int div = 1 ; div <= n ; div ++ ) if(n % div == 0) std :: cout << div << " "; return 0; }
In acest exemplu, verificam daca fiecare numar de la 1 la n divide exact (restul este 0) numarul n.
Metoda mai efficienta
Metoda mai eficienta este sa verificam doar numerele pana la
#includeint main() { int n; std :: cin >> n; for(int div =1 ; div * div <= n ; div ++ ) if(n % div == 0) { std :: cout << d << " "; if(div * div < n) std :: cout << n / div << " "; } return 0; }
div * div <= n
este ca si cum am scrie div <= , doar ca ridicam la puterea a doua, deoarece functia de sqrt() este una inceata.