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
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;
}
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 .
Alte întrebări interesante
Biologie,
8 ani în urmă
Istorie,
8 ani în urmă
Biologie,
8 ani în urmă
Biologie,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă