Pe scurt
Un întreg pozitiv este divizor al lui dacă restul împărțirii lui la este zero. Pentru 12, divizorii pozitivi sunt 1, 2, 3, 4, 6 și 12. În acest curs, un divizor propriu este strict între 1 și ; pentru 12, divizorii proprii sunt 2, 3, 4 și 6. Divizorii pozitivi apar în perechi: , , . Această observație reduce căutarea până la rădăcina pătrată a numărului.
În Python, 12 % 3 == 0 este adevărat: 3 divide 12 fără rest. Testând valorile de la 1 la 12 obții divizorii 1, 2, 3, 4, 6, 12.
În detaliu
Spunem că este divizor al lui dacă . Divizorii pozitivi ai unui număr apar în perechi : dacă , unul dintre ei este cel mult . Pentru perechile sunt , și , iar divizorii mai mici decât sunt 1, 2 și 3. De aceea e suficient să testezi valorile cu și să tratezi fiecare divizor găsit împreună cu perechea lui. Dacă , perechea coincide cu și numărul se ia o singură dată. Divizorii 1 și se numesc improprii; ceilalți sunt divizori proprii. Testul d <= n / d este echivalent cu , dar nu depășește tipul întreg la numere mari.
Exemplul 1 — numărul și suma divizorilor lui 36. Valorile lui sunt 1, 2, 3, 4, 5 și 6.
- : divizor, pereche , contorul crește cu 2, suma cu .
- : pereche , contor 4, suma .
- : pereche , contor 6, suma .
- : pereche , contor 8, suma .
- nu divide 36.
- : , un singur divizor, contor 9, suma .
#include <iostream>
using namespace std;
int main() {
int n = 36, cnt = 0, suma = 0;
for (int d = 1; d <= n / d; ++d) {
if (n % d == 0) {
cnt += (d == n / d) ? 1 : 2;
suma += d + (d == n / d ? 0 : n / d);
}
}
cout << cnt << ' ' << suma;
return 0;
}
Programul afișează 9 91. Numărul 36 are un număr impar de divizori pentru că este pătrat perfect; orice alt număr natural are un număr par de divizori.
Exemplul 2 — afișarea divizorilor în ordine crescătoare. Pentru , parcurgi mai întâi de la 1 în sus și afișezi divizorii mici, apoi de la rădăcină în jos și afișezi perechile mari , sărind peste pătratul perfect:
int n = 12, r = 1;
while ((r + 1) * (r + 1) <= n) ++r; // r = [radical din n]
for (int d = 1; d <= r; ++d)
if (n % d == 0) cout << d << ' ';
for (int d = r; d >= 1; --d)
if (n % d == 0 && d * d != n) cout << n / d << ' ';
Prima parcurgere afișează divizorii mici 1, 2, 3. A doua merge în sens invers și afișează perechile lor mari , , , sărind peste pătratul perfect, unde perechea ar repeta divizorul. Rezultatul este 1 2 3 4 6 12, adică divizorii în ordine crescătoare.
Un număr natural este perfect dacă este egal cu suma divizorilor săi proprii și a lui 1 fără el însuși; de exemplu . Aceeași parcurgere până la îl poate verifica fără să testeze toate valorile până la .
Exemplul 3 — numărul divizorilor din descompunerea în factori primi. Dacă , numărul divizorilor pozitivi este . Pentru rezultă divizori. Parcurgerea cu perechi dă același rezultat: ciclul merge până la , pentru că . Valorile care divid 360 sunt 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15 și 18, adică 12 valori. Niciuna nu are , deci fiecare aduce câte 2 divizori și contorul final este 24.
Exemplul 4 — testul de număr prim. Un număr este prim dacă are exact doi divizori, 1 și . Este suficient să cauți un divizor cu . Pentru 97 se testează , deoarece . Niciun nu dă rest 0, deci 97 este prim.
Pentru admitere
La numărarea divizorilor, nu dubla rădăcina unui pătrat perfect. Pentru există un singur divizor, 1. Când condiția buclei este d * d <= n, ultima valoare a lui este , nu . Într-un fragment care folosește n % d, valoarea este interzisă. Dacă într-un fragment apar ambele bucle, ca mai sus, ordinea afișării este cea a ciclurilor, nu cea a valorilor. Complexitatea metodei pe perechi este proporțională cu , iar a celei care testează toate valorile până la este proporțională cu .
Pentru ciclul face o singură iterație, , cu , adaugă 1 și numărul are un singur divizor. Pentru un număr prim , valoarea adaugă 2, iar celelalte iterații nu găsesc niciun divizor, deci contorul final este 2.
Exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?
int n = 36, k = 0;
for (int d = 1; d * d <= n; d++)
if (n % d == 0)
k += (d * d == n) ? 1 : 2;
cout << k;
- a) 5
- b) 6
- c) 9
- d) 10
Răspunsul corect este c). Ciclul parcurge . Valorile 1, 2, 3 și 4 sunt divizori cu perechi distincte (36, 18, 12, 9) și adaugă câte 2: contorul ajunge la 8. Valoarea 5 nu divide 36. Pentru avem , deci se adaugă 1 și . Varianta a) numără doar iterațiile care găsesc un divizor mic, adică 1, 2, 3, 4 și 6 fără perechi. Varianta d) numără și rădăcina 6 de două ori.
Greșeli frecvente
- Greșit: 1 are doi divizori pozitivi.Corect: are doar divizorul 1.
- Greșit: la 36, perechea lui 6 adaugă încă un 6 distinct.Corect: 6 se numără o singură dată.
- Greșit: orice valoare poate fi folosită la
n % d.Corect: divizorul trebuie să fie nenul.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633 și 1653–1654; OMEC 4370/2026, anexa 8, p. 155–156; rocnee.eu
- OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
- OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1653–1654; rocnee.eu
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro
Documente consultate
- UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
- Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42), p. 1653–1654; rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3 și 6; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
