Informatică, întrebare adresată de condratradu69, 9 ani în urmă

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 ≤ 10000000000000000000
Exemplu:
Intrare

1 4
Ieșire

3

Răspunsuri la întrebare

Răspuns de express
6
#include <bits/stdc++.h>
using namespace std;
unsigned long long start, stop;
unsigned long long a, b, i, nr, p = 1;
bool prim(long long x)
{
    bool ok = true;
    long long i;
    if(x == 0 or x == 1) return false;
    for(i = 2; i * i <= x; i ++)
    if(x % i == 0)
    {
        ok = false;
        break;
    }
    return ok;
}

int main()
{
    cin >> a >> b;
    start = log2(a) + 1;
    stop = log2(b);
    for(i = 1; i <= start; i ++)
        p = p * 2;
    if(prim(start))
    {
        nr = nr + p - a;
    }
    for(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;
}


condratradu69: Pentru clasa a 9-a sti sa o faci , adica mai simplu .
express: Tu vrei meditatii online?...ma faci sa regret ca ti-am dat o sursa la care eu am muncit o saptamana? Chiar daca ti-am dat sursa oficiala si nu sursa mea, pune mana pe Watches, rezolv-o pas cu pas si analizeaz-o ...ce daca esti in clasa a IX-a ?
condratradu69: Ma chinui de o saptamana ca un prost sa ma gandesc la ea si tot sunt foarte aproape de raspuns , nu mai rezist , sti ceva imi bag pl in problema ta ca nu ai face un bine cuiva . Hai pa .
condratradu69: Mersi pentru nimic , oficiala o aveam si eu .
condratradu69: Totusi daca mi-ai da varianta ta nu m-as supara .
express: Te cred ca nu te-ai supara...dar sa sti ca eu m-am suparat.
condratradu69: O sa-ti treaca , fac cinste cu bere data viitoare cand ne vedem.
condratradu69: Dar esti baiat bun si o sa mi-o dat , nu-i asa?
Alte întrebări interesante