fbpx

Problema #2579 – Putere2Interval – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se citesc 3 numere naturale n, a și b. Afișați primele n puteri ale lui 2, în ordine crescătoare, din intervalul [a,b]. Dacă nu există cel puțin n puteri ale lui 2 în interval, atunci se vor afișa cele care există.

Date de intrare

Programul citește de la tastatură numărul n, a și b, separate prin spații.

Date de ieșire

Programul va afișa pe ecran puterile lui 2 din intervalul [a,b].

Restricții și precizări

  • 1 ≤ n ≤ 60
  • 1 ≤ a ≤ b < 2^64

Exemplu

Intrare

2 6 35

Ieșire

8 16

Explicație

În interval există 3 puteri ale lui 2, dar s-au afișat doar n dintre ele.

#include <bits/stdc++.h>

using namespace std;

long long int log(long long int n)
{
    int cnt =0;
    while(n>1)
        n/=2 , cnt++;
    return cnt;
}

long long int put(int i)
{
    long long int put=1;
    while(i)
        put*=2 , i--;
    return put;
}

int main()
{
    long long int n , a , b;
    cin >> n >> a >> b;
    int put1=log(a);
    if(pow(2 , put1)!=a)
        put1++;
    int put2=log(b);
    for(int i = put1 ; i <= put2 && n ; ++i , n--)
        cout << put(i)  << ' ';
    return 0;
}
Comentarii

S-ar putea sa iti placa