Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define all(x) x.begin(), x.end()
  4. #define ll long long
  5. #define ld long double
  6.  
  7. using namespace std;
  8.  
  9. void Draganov47(){
  10. #ifdef _47
  11. freopen("input.txt", "r", stdin);
  12. freopen("output.txt", "w", stdout);
  13. #endif
  14. ios_base::sync_with_stdio(0);
  15. cin.tie(0);
  16. cout.tie(0);
  17. }
  18.  
  19. const ll M = 1e9 + 7;
  20.  
  21. ll binpow(ll a, ll p){
  22. ll res = 1;
  23. while(p){
  24. if (p & 1){
  25. res *= a;
  26. res %= M;
  27. }
  28. p >>= 1;
  29. a *= a;
  30. a %= M;
  31. }
  32. return (res % M);
  33. }
  34.  
  35. ll gett(ll a, ll b, ll m){
  36. ll res = 0;
  37. while (a > 0){
  38. if (a & 1) res = (res + b) % m;
  39. a >>= 1;
  40. b = (b << 1) % m;
  41. }
  42. return res;
  43. }
  44.  
  45. ll x, k;
  46.  
  47. void read(){
  48. cin >> x >> k;
  49. if (x == 0){
  50. cout << 0;
  51. exit(0);
  52. }
  53. }
  54.  
  55. void solve(){
  56. ll sum;
  57. ll n = (binpow(2, k) - 1 + M) % M;
  58. sum = ((n * (n + 1)) % M);
  59. ll znam = binpow(2, M - 2);
  60. sum = (sum * znam) % M;
  61. sum = (sum * 2) % M;
  62. //cout << sum << endl;
  63.  
  64. ll fsum = (binpow(2, k) * binpow(2, k)) % M;
  65. fsum = (fsum * 2) % M;
  66. fsum = gett(fsum, x, M);
  67. //cout << fsum << endl;
  68.  
  69. sum = (fsum - sum + M * M) % M;
  70. //cout << sum << endl;
  71.  
  72. znam = binpow(binpow(2, k), M - 2);
  73. //cout << znam << endl;
  74. sum = (sum * znam) % M;
  75.  
  76. cout << sum;
  77. }
  78.  
  79. int main(){
  80. Draganov47();
  81. read();
  82. solve();
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement