Un număr întreg are divizori proprii și improprii. Divizorii improprii sunt 1 și numărul însuși. Toate numerele au divizori improprii. Divizorii proprii sunt toate celelalte numere la care numărul nostru se împarte fără rest. Nu toate numerele au divizori proprii.
De exemplu, numărul 144 are divizorii:
1,2,3,4,6,8,8,9,12,16,18,24,36,48,72,144 unde 1 și 144 sunt divizorii improprii.
În programul de mai jos vom afișa divizorii proprii ce aparțin unui număr întreg citit de la tastatură.
Cod:
#include <iostream>
using namespace std;
int main()
{
int n,d=2;
do{
cout << "dati nr. pozitiv ";
cin >> n;
}while(n<=0);
while(d<=n/2){
if(n%d==0){
cout << d <<" ";
}
d++;
}
return 0;
}
Explicarea codului:
Acest program determină și afișează toți divizorii proprii ai unui număr pozitiv introdus de la tastatură. Iată o explicație detaliată pentru fiecare parte a programului:
1. Biblioteca și spațiul de nume:
#include <iostream>
using namespace std;
#include <iostream>: Este utilizată pentru funcții de intrare și ieșire precum cin (pentru citire de la tastatură) și cout (pentru afișare pe ecran).
using namespace std;: Permite utilizarea funcțiilor din biblioteca standard fără a scrie std:: înaintea lor.
2. Funcția principală:
int main() {
int n, d = 2;
int n: Variabila n este utilizată pentru a stoca numărul introdus de utilizator.
int d = 2: Variabila d reprezintă un posibil divizor și este inițializată cu 2, deoarece divizorii proprii nu includ 1 (care este implicit) și numărul însuși.
3. Citirea unui număr pozitiv:
do {
cout << "dati nr. pozitiv ";
cin >> n;
} while (n <= 0);
Funcționalitate:
- Blochează execuția programului până când utilizatorul introduce un număr strict pozitiv.
- Bucla
do-while:- Afișează mesajul
dati nr. pozitivși citește valoarea introdusă înn. - Dacă valoarea lui
neste mai mică sau egală cu 0, bucla se repetă. - Dacă
n > 0, bucla se oprește și programul continuă.
- Afișează mesajul
Exemplu de comportament:
- Utilizatorul introduce
-5:Numărul trebuie să fie pozitiv. - Utilizatorul introduce
0:Numărul trebuie să fie pozitiv. - Utilizatorul introduce
12: Bucla se oprește.
4. Determinarea divizorilor proprii:
while (d <= n / 2) {
if (n % d == 0) {
cout << d << " ";
}
d++;
}
Bucla while:
- Această buclă iterativă verifică fiecare posibil divizor
dde la 2 până lan / 2. Nu este nevoie să verificăm valori mai mari decâtn / 2, deoarece un număr nu are divizori proprii mai mari decât jumătatea sa.
Condiția if (n % d == 0):
- Testează dacă
deste un divizor al luin:- Dacă restul împărțirii lui
nladeste 0 (n % d == 0), înseamnă căddivide exactn. - În acest caz,
deste afișat pe ecran.
- Dacă restul împărțirii lui
Incrementul d++:
- Crește valoarea lui
dcu 1 la fiecare iterație, pentru a verifica următorul posibil divizor.
5. Ieșirea din program:
return 0;
Marchează încheierea programului.
Exemplu de rulare:
Caz 1: Număr pozitiv care nu este prim (are divizori proprii):
dati nr. pozitiv: -3
dati nr. pozitiv: 0
dati nr. pozitiv: 12
2 3 4 6
Caz 2: Număr prim (nu are divizori proprii):
dati nr. pozitiv: 7
Nu afișează nimic, deoarece un număr prim nu are divizori proprii (divizorii săi sunt doar 1 și el însuși).
Comportament general:
- Solicită utilizatorului să introducă un număr strict pozitiv.
- Detectează și afișează toți divizorii proprii ai acelui număr.
- Ignoră numerele negative, zero, sau cazurile unde numărul nu are divizori proprii.
Observații:
- Bucla
do-whileeste utilă pentru validarea intrării utilizatorului. - Bucla
whileși condițiaifsunt esențiale pentru identificarea divizorilor proprii.
Temă:
Să se modifice programul de mai sus pentru a afișa dacă un număr întreg citit de le tastatură este prim.
