Divizorii și multiplii unui număr
În problemele de algoritmică apar foarte des două noțiuni:
- divizorii unui număr;
- multiplii unui număr.
Aceste noțiuni sunt baza multor exerciții de matematică și informatică.
Ce este un divizor?
Un număr d este divizor al lui n
dacă n se împarte exact la d.
Cu alte cuvinte:
deste divizor al luindacăn % d == 0.
Exemplu pentru n = 12:
1este divizor (12 % 1 = 0);2este divizor (12 % 2 = 0);3este divizor (12 % 3 = 0);5nu este divizor (12 % 5 = 2).
Ce este un multiplu?
Un număr m este multiplu al lui n
dacă există un număr întreg k astfel încât:
m = n * k
Exemplu pentru n = 4:
4,8,12,16,20sunt multipli ai lui4;10nu este multiplu al lui4.
Cum aflăm toți divizorii unui număr
Parcurgem toate valorile de la 1 la
n și verificăm dacă împart exact pe
n.
int n;
cin >> n;
for (int d = 1; d <= n; d++) {
if (n % d == 0) {
cout << d << " ";
}
}Input:
12Output:
1 2 3 4 6 12Observație utilă
Pentru orice n >= 1, numărul 1
este divizor.
Pentru n >= 2, există mereu cel puțin doi
divizori evidenți: 1 și n.
Câți divizori are un număr
int n;
cin >> n;
int cnt = 0;
for (int d = 1; d <= n; d++) {
if (n % d == 0) {
cnt++;
}
}
cout << cnt;Input:
12Output:
6Cum generăm multiplii unui număr
Pentru a afișa primii k multipli ai lui
n, putem folosi un for.
int n, k;
cin >> n >> k;
for (int i = 1; i <= k; i++) {
cout << n * i << " ";
}Input:
5 6Output:
5 10 15 20 25 30Multiplii lui
n până la o limită
int n, limita;
cin >> n >> limita;
for (int x = n; x <= limita; x += n) {
cout << x << " ";
}Input:
4 25Output:
4 8 12 16 20 24Legătura dintre divizori și multipli
Dacă d este divizor al lui n,
atunci:
neste multiplu al luid.
Exemplu:
3este divizor al lui12;12este multiplu al lui3.
Greșeli frecvente
1. Începem de la 0 când căutăm divizori
for (int d = 0; d <= n; d++) // GREȘITLa d = 0, expresia n % d nu este
permisă.
2. Confuzie între divizor și multiplu
ddivide pen->deste divizor al luin;nse scried * k->neste multiplu al luid.
Cum verificăm rapid dacă m este multiplu al lui
n?
Verificarea standard este:
m % n == 0, cu condiția n != 0.
3. Condiția greșită la verificare
if (n % d = 0) // GREȘITCorect:
if (n % d == 0)Ce să reții
- Un divizor al lui
nîmparte exact pen. - Un multiplu al lui
nare forman * k. - Divizorii se caută, de obicei, în intervalul
1 ... n. - Multiplii se pot genera prin
n, 2*n, 3*n, .... - Nu împărțim niciodată la
0.