VladKov's blog

By VladKov, history, 4 years ago, In Russian

Привет. Помогите в решении этой задачи. Есть офф, решение, которое я все равно не понимаю,

#include <bits/stdc++.h>
using namespace std;

static const int mod = 1000000000 + 7;

static int pow2(int degree) {
    long long accum = 2;
    long long res = 1;
    for (int i = 0; i < 31; i++) {
        if (degree & (1 << i))
            res = res * accum % mod;
        accum = accum * accum % mod;
    }
    return res % mod;
}

int main() {
    int k;
    scanf("%d", &k);
    int degree = k - (k & (k - 1));
    int res = (pow2(degree) + mod - 1) % mod;
    printf("%d", res);
    
    return 0;
}

Вот не люблю битовые операции). Могу решить задачи сложнее на другие темы, но только не битовые операции)

Всех благодарю

  • Vote: I like it
  • +30
  • Vote: I do not like it