Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define all(x) x.begin(), x.end()
- #define ll long long
- #define ld long double
- using namespace std;
- void Draganov47(){
- #ifdef _47
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- }
- const ll M = 1e9 + 7;
- ll binpow(ll a, ll p){
- ll res = 1;
- while(p){
- if (p & 1){
- res *= a;
- res %= M;
- }
- p >>= 1;
- a *= a;
- a %= M;
- }
- return (res % M);
- }
- ll gett(ll a, ll b, ll m){
- ll res = 0;
- while (a > 0){
- if (a & 1) res = (res + b) % m;
- a >>= 1;
- b = (b << 1) % m;
- }
- return res;
- }
- ll x, k;
- void read(){
- cin >> x >> k;
- if (x == 0){
- cout << 0;
- exit(0);
- }
- }
- void solve(){
- ll sum;
- ll n = (binpow(2, k) - 1 + M) % M;
- sum = ((n * (n + 1)) % M);
- ll znam = binpow(2, M - 2);
- sum = (sum * znam) % M;
- sum = (sum * 2) % M;
- //cout << sum << endl;
- ll fsum = (binpow(2, k) * binpow(2, k)) % M;
- fsum = (fsum * 2) % M;
- fsum = gett(fsum, x, M);
- //cout << fsum << endl;
- sum = (fsum - sum + M * M) % M;
- //cout << sum << endl;
- znam = binpow(binpow(2, k), M - 2);
- //cout << znam << endl;
- sum = (sum * znam) % M;
- cout << sum;
- }
- int main(){
- Draganov47();
- read();
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement