# PBinfo #3301 – nrdiv9 – Rezolvare C++

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

## Enunț

Cerința
Se dă un număr natural n.  Să se scrie un program care determină și afișează pe ecran numărul de numere mai mici sau egale cu n care au exact 9 divizori.

Date de intrare
Programul citește din fișierul nrdiv9.in numărul n.

Date de ieșire
Programul scrie în fișierul nrdiv9.out numărul k, reprezentând numărul de numere mai mici sau egale cu n care au exact 9 divizori.

Restricții și precizări

1 ≤ n ≤ 1.000.000.000;
dacă nu există numere mai mici sau egale cu n care au exact 9 divizori se va afișa valoarea 0.

Exemplul 1:
nrdiv9.in

100
nrdiv9.out

2
Explicație
Sunt 2 numere mai mici sau egale cu 100 care au exact 9 divizori: 36 și 100.

Exemplul 2:
nrdiv9.in

1000
nrdiv9.out

8
Explicație
Sunt 8 numere mai mici sau egale cu 1000 care au exact 9 divizori: 36, 100, 196, 225, 256,  441, 484, 676.

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
ifstream in("nrdiv9.in");
ofstream out("nrdiv9.out");
int main() {
    int n, var1, var2, temp, nr = 0;
    in >> n;
    temp = sqrt(n);
    int ciur[temp];
    for (int i = 1; i <= temp; i++)
        ciur[i] = i;
    for (int i = 2; i * i <= temp; i++)
        if (ciur[i] == i) {
        for (int j = i * i; j <= temp; j = j + i)
            if (ciur[j] == j)
            ciur[j] = i;
    } for (int i = 2; i <= temp; i++) {
        var2 = ciur[i / ciur[i]];
        var1 = ciur[i]; 
        if (var1 * var2 == i && var2 != 1 && var1 != var2) nr++;
        else if (ciur[i] == i)
            if (pow(i, 8) <= n)
        nr++;
    } out << nr;
    return 0;
}
```

## Resurse

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