fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int, int> pll;
  5. #define fastio ios::sync_with_stdio(false), cin.tie(0)
  6. #pragma GCC optimize("Ofast")
  7. #define FOR(i, a, b) for(int i = (a); i < (b); i++)
  8. #define REP(i, n) FOR(i, 0, n)
  9. #define REP1(i, n) FOR(i, 0, n + 1)
  10. #define pb push_back
  11. #define pf push_front
  12. #define eb emplace_back
  13. #define f first
  14. #define s second
  15. #define lowbit(x) x&-x
  16. #define int long long
  17. #define ckmin(a, b) a = min(a, b)
  18. #define ckmax(a, b) a = max(a, b)
  19. const int N = 1e9 + 7;
  20. const int mod = 30011;
  21.  
  22. ll fpow(ll a, ll b){
  23. ll ret = 1;
  24. while(b > 0){
  25. if(b & 1) ret = ret * a % mod;
  26. a = a * a % mod;
  27. b >>= 1;
  28. }
  29. return ret;
  30. }
  31.  
  32. void fwt(vector<int> &a){
  33. int n = 1;
  34. while(n < a.size()) n *= 2;
  35. a.resize(n);
  36. for(int len = 1; 2 * len <= n; len <<= 1){
  37. for(int i = 0; i < n; i += 2 * len){
  38. for(int j = 0; j < len; j++){
  39. int u = a[i + j], v = a[i + j + len];
  40. a[i + j] = (u + v) % mod, a[i + j + len] = (u - v) % mod;
  41. }
  42. }
  43. }
  44. }
  45.  
  46. signed main(void){
  47. fastio;
  48. int n, k;
  49. cin>>n>>k;
  50. vector<int> a(k + 1);
  51. for(int i = 0; i <= k; i++) a[i] = 1;
  52. fwt(a);
  53. for(int i = 0; i < a.size(); i++) a[i] = fpow(a[i], n);
  54. fwt(a);
  55. int inv = fpow(a.size(), mod - 2);
  56. cout<<(fpow(k + 1, n) - a[0] * inv % mod + mod) % mod;
  57. }
Success #stdin #stdout 0.01s 5288KB
stdin
32 3
stdout
20552