MeditatiiDirect.ro Logo
MeditatiiDirect.ro
Educație la un click distanță
MeditatiiMateriiAdmitereTutorialePregatire BACSubiecte BACVariante BACBlog
InformaticăliceuClasa 9mediu

Numere Prime în C++ - Verificare și Utilizare

Tot ce trebuie să știi despre numerele prime: verificare, generare, descompunere în factori primi. Tutorial complet pentru BAC și admitere.

3 luni în urmă
0 vizualizări
35 minute

Numere Prime în C++ - Verificare și Utilizare

Definiție

Un număr prim este un număr natural mai mare decât 1 care are exact doi divizori: 1 și el însuși.

Exemple:

  • •Numere prime: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...
  • •Numere care NU sunt prime: 1 (un singur divizor), 4 (are divizorii 1, 2, 4), 6 (are divizorii 1, 2, 3, 6)

Observații importante:

  • •2 este singurul număr prim par
  • •1 NU este număr prim (are un singur divizor)

Teorie

Metoda 1: Verificare prin încercare de divizori (până la n-1)

Verificăm dacă există vreun divizor între 2 și n-1.

Complexitate: O(n) - ineficient pentru numere mari

Metoda 2: Verificare optimizată (până la √n)

Dacă n are un divizor d > √n, atunci n/d < √n, deci am fi găsit deja divizorul n/d.

Complexitate: O(√n) - mult mai eficient!

Exemple C++ Compilabile

Exemplul 1: Verificare dacă un număr este prim (metodă optimizată)

1#include <iostream>
2using namespace std;
3
4int main() {
5    int n;
6    cout << "Introduceti un numar: ";
7    cin >> n;
8    
9    // Cazuri speciale
10    if (n < 2) {
11        cout << n << " NU este prim" << endl;
12        return 0;
13    }
14    
15    // Verificăm divizorii de la 2 la sqrt(n)
16    bool este_prim = true;
17    for (int d = 2; d * d <= n; d++) {
18        if (n % d == 0) {
19            este_prim = false;
20            break;
21        }
22    }
23    
24    if (este_prim)
25        cout << n << " este PRIM" << endl;
26    else
27        cout << n << " NU este prim" << endl;
28    
29    return 0;
30}

Observație: Folosim d * d <= n în loc de d <= sqrt(n) pentru a evita lucrul cu numere reale.

Exemplul 2: Funcție pentru verificare primalitate

1#include <iostream>
2using namespace std;
3
4int estePrim(int n) {
5    if (n < 2) return 0;
6    if (n == 2) return 1;
7    if (n % 2 == 0) return 0;  // Eliminăm numerele pare
8    
9    for (int d = 3; d * d <= n; d = d + 2) {
10        if (n % d == 0)
11            return 0;
12    }
13    return 1;
14}
15
16int main() {
17    int n;
18    cin >> n;
19    
20    if (estePrim(n))
21        cout << "PRIM";
22    else
23        cout << "NU este prim";
24    
25    return 0;
26}

Exemplul 3: Afișarea numerelor prime până la n

1#include <iostream>
2using namespace std;
3
4int estePrim(int n) {
5    if (n < 2) return 0;
6    if (n == 2) return 1;
7    if (n % 2 == 0) return 0;
8    
9    for (int d = 3; d * d <= n; d = d + 2) {
10        if (n % d == 0)
11            return 0;
12    }
13    return 1;
14}
15
16int main() {
17    int n;
18    cout << "Introduceti limita: ";
19    cin >> n;
20    
21    cout << "Numerele prime pana la " << n << " sunt: ";
22    for (int i = 2; i <= n; i++) {
23        if (estePrim(i))
24            cout << i << " ";
25    }
26    
27    return 0;
28}

Exemplul 4: Descompunerea în factori primi

1#include <iostream>
2using namespace std;
3
4int main() {
5    int n;
6    cout << "Introduceti un numar: ";
7    cin >> n;
8    
9    cout << n << " = ";
10    int d = 2;
11    int primul = 1;  // Pentru formatare
12    
13    while (n > 1) {
14        int putere = 0;
15        while (n % d == 0) {
16            putere++;
17            n = n / d;
18        }
19        
20        if (putere > 0) {
21            if (!primul) cout << " * ";
22            cout << d;
23            if (putere > 1) cout << "^" << putere;
24            primul = 0;
25        }
26        d++;
27    }
28    
29    return 0;
30}

Exemplu de execuție:

  • •Input: 360
  • •Output: 360 = 2^3 * 3^2 * 5

Exemplul 5: Suma divizorilor primi

1#include <iostream>
2using namespace std;
3
4int estePrim(int n) {
5    if (n < 2) return 0;
6    for (int d = 2; d * d <= n; d++) {
7        if (n % d == 0) return 0;
8    }
9    return 1;
10}
11
12int main() {
13    int n, suma = 0;
14    cin >> n;
15    
16    for (int d = 2; d <= n; d++) {
17        if (n % d == 0 && estePrim(d)) {
18            suma = suma + d;
19        }
20    }
21    
22    cout << "Suma divizorilor primi: " << suma << endl;
23    return 0;
24}

Greșeli Frecvente

1. Considerarea lui 1 ca număr prim

1// GREȘIT
2if (n >= 1) return true;  // 1 NU este prim!
3
4// CORECT
5if (n < 2) return false;

2. Verificarea până la n în loc de √n

1// INEFICIENT - O(n)
2for (int d = 2; d < n; d++) { ... }
3
4// EFICIENT - O(√n)
5for (int d = 2; d * d <= n; d++) { ... }

3. Uitarea cazului n = 2

1// GREȘIT - 2 nu ar trece testul d * d <= n
2for (int d = 2; d * d <= n; d++) { ... }
3// Pentru n=2: 2*2 > 2, nu intră în for
4
5// CORECT - tratăm separat sau inițializăm correct
6if (n == 2) return true;

Exerciții Tip PBInfo

Exercițiul 1 - Al n-lea număr prim

Să se afișeze al n-lea număr prim.

  • •Exemplu: n = 5 → Rezultat: 11 (2, 3, 5, 7, 11)

Exercițiul 2 - Numere prime gemene

Să se afișeze toate perechile de numere prime gemene (diferența = 2) până la n.

  • •Exemplu: n = 20 → (3,5), (5,7), (11,13), (17,19)

Exercițiul 3 - CMMDC folosind factori primi

Să se calculeze CMMDC(a, b) folosind descompunerea în factori primi.

Exercițiul 4 - Cel mai mare factor prim

Să se afișeze cel mai mare factor prim al unui număr n.

  • •Exemplu: n = 100 → Rezultat: 5

Exercițiul 5 - Ipoteza lui Goldbach

Să se verifice ipoteza lui Goldbach: orice număr par > 2 se scrie ca sumă de 2 numere prime.

  • •Exemplu: n = 10 → 10 = 3 + 7 sau 10 = 5 + 5

Tutorialul te-a ajutat?

Dacă ai nevoie de ajutor personalizat, găsește un profesor calificat pentru meditații

MeditatiiDirect.ro Logo
MeditatiiDirect.ro

Platforma educationala din Romania pentru meditatii particulare. Profesori verificati, recenzii reale, inscriere gratuita.

Cauta sau publica anunturi gratuit pentru toate materiile scolare.

Meditatii

  • Meditatii
  • Meditatii Matematica
  • Meditatii Informatica
  • Meditatii Romana
  • Meditatii Engleza
  • Anunturi Meditatii
  • Meditatii Online
  • Ore Online
  • Meditatii BAC
  • Meditatii Bucuresti
  • Meditatii Cluj-Napoca
  • Meditatii Timisoara
  • Meditatii Iasi
  • Meditatii Fizica
  • Meditatii Chimie
  • Meditatii Biologie

Materii Populare

  • Matematică
  • Limba Română
  • Limba Engleză
  • Informatică
  • Fizică
  • Toate Materiile →

Platforma

  • Cum functioneaza
  • Pentru elevi si parinti
  • Pentru profesori
  • Intrebari frecvente
  • Despre noi
  • Publica anunt gratuit

Resurse

  • Profesor Particular
  • Pregatire BAC
  • Admitere Facultate
  • Universitati Romania
  • Facultati Medicina
  • Facultati Informatica
  • Facultati Politehnica
  • Facultati Drept
  • Facultati Economice
  • Facultati Psihologie
  • Grile UPB
  • Grile Medicina
  • Grile Auto 2026
  • Variante BAC 2026
  • Simulare BAC 2026
  • Subiecte BAC
  • Subiecte Admitere
  • Titularizare 2025
  • Tutoriale
  • Blog educational
  • Ore Online
  • Profesori Online
  • Contact

MeditatiiDirect.ro este o platforma educationala din Romania unde gasesti meditatii si profesori particulari verificati pentru matematica, limba romana, engleza, informatica, fizica, chimie si alte materii. Disponibil in Bucuresti, Cluj-Napoca, Timisoara, Iasi si toata Romania, inclusiv meditatii online. Publica sau gaseste anunturi meditatii gratuit, programeaza ore online cu profesori verificati, cauta un profesor particular sau incepe meditatii BAC si admiterea la facultate.

© 2026 MeditatiiDirect. Toate drepturile rezervate.