Привет, Помогите в объяснении решения этой задачи. Есть офф, решение, которое я все равно не понимаю,
#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;
}
Вот не люблю битовые операции). Могу решить задачи сложнее на другие темы, но только не битовые операции) Всех благодарю