# PBinfo #1479 – pretios – Rezolvare C++

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

## Enunț

Un număr natural în baza 10 se numește prețios dacă numărul de cifre ale sale din baza 2 este număr prim.

Cerința
Se dă un interval [a,b].Determinați câte numere prețioase se află în acest interval.

Date de intrare
Programul citește de la tastatură numerele a și b.

Date de ieșire
Programul va afișa pe ecran numărul x, reprezentând numărul de numere prețioase din intervalul dat.

Restricții și precizări

1 ≤ a,b ≤ 10.000.000.000.000.000.000

Exemplu:
Intrare

1 4
Ieșire

3
Explicație
Cele 3 numere prețioase sunt 2 3 4.

## Cod sursă C++

```cpp
#include <iostream>
#include <math.h>
using namespace std;
bool prim(long long n) {
    long long int d;
    if (n == 0 or n == 1)
        return false;
    for (d = 2; d * d <= n; ++d)
    if (n % d == 0)
        return false;
    return true;
}
unsigned long long start,stop;
unsigned long long a, b, i, nr, p = 1;
int main() {
    cin >> a >> b;
    start = log2(a) + 1;
    stop = log2(b);
    for (int i = 1; i <= start; i++)
        p = p * 2;
    if (prim(start)) {
        nr = nr + p - a;
    } for (int i = start; i < stop; ++i)
        if (prim(i + 1)) { 
        nr = nr + p;
        p = p * 2;
    } else p = p * 2;
    if (prim(stop + 1)) 
        nr = nr + b - p + 1;
    cout << nr << " ";
    return 0;
}
```

## Resurse

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