M2 L2 Info Divizibilitate divizori proprii

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ă.

video 1 divizori proprii

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ă în n.
    • Dacă valoarea lui n este mai mică sau egală cu 0, bucla se repetă.
    • Dacă n > 0, bucla se oprește și programul continuă.

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 d de la 2 până la n / 2. Nu este nevoie să verificăm valori mai mari decât n / 2, deoarece un număr nu are divizori proprii mai mari decât jumătatea sa.

Condiția if (n % d == 0):

  • Testează dacă d este un divizor al lui n:
    • Dacă restul împărțirii lui n la d este 0 (n % d == 0), înseamnă că d divide exact n.
    • În acest caz, d este afișat pe ecran.

Incrementul d++:

  • Crește valoarea lui d cu 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:

  1. Solicită utilizatorului să introducă un număr strict pozitiv.
  2. Detectează și afișează toți divizorii proprii ai acelui număr.
  3. Ignoră numerele negative, zero, sau cazurile unde numărul nu are divizori proprii.

Observații:

  • Bucla do-while este utilă pentru validarea intrării utilizatorului.
  • Bucla while și condiția if sunt 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.