# PBinfo #379 – aprim – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Un număr natural se numește aproape prim dacă poate fi scris ca produs de două numere naturale prime distincte.

Cerinţa
Se citește un număr natural. Să se verifice dacă este aproape prim.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieşire
Programul afișează pe ecran cuvântul DA, dacă n este aproape prim, respectiv NU în caz contrar.

Restricţii şi precizări

1 ≤ n ≤ 1.000.000.000

Exemplu 1:
Intrare

35
Ieșire

DA
Exemplu 2:
Intrare

50
Ieșire

NU
Explicație
35=5*7. 50 nu poate fi scris ca produs de două numere prime distincte.

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int main() {
    int n;
    bool aprim = false;
    cin >> n;
    int d = 2;
    while (!aprim && d * d < n) {
        if (n % d == 0) {
            int a = d, b = n / d;
            int prim = true;
            if (a < 2) prim = false;
            if (a > 2 && a % 2 == 0) prim = false;
            for (int k = 3; k * k <= a ; k += 2)
                if (a % k == 0) prim = false;
            if (prim) {
                prim = true;
                if (b < 2) prim = false;
                if (b > 2 && b % 2 == 0) prim = false;
                for (int k = 3; k * k <= b ; k += 2)
                    if (b % k == 0) prim = false;
                if (prim) aprim = true;
            }
        } if (d == 2) d++;
        else d = d + 2;
    } if (aprim) cout << "DA";
    else cout << "NU";
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/379)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/379/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-379/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
