Помогите пожалуйста с задачей на битовые операции

Revision ru3, by VladKov, 2020-01-03 17:02:08

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

#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;
}

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

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

Tags битовые операции

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru3 Russian VladKov 2020-01-03 17:02:08 2 Мелкая правка: 'перации)\nВсех бла' -> 'перации)\n\nВсех бла'
ru2 Russian VladKov 2020-01-03 17:01:49 15
ru1 Russian VladKov 2020-01-03 17:01:25 871 Первая редакция (опубликовано)