G2A Many GEOs
SHARE
TWEET

Untitled

a guest Apr 1st, 2014 154 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. #include <string.h>
  4. using namespace std;
  5. long long mod = 1e9 + 7;
  6. int gcd (int a, int b, int & x, int & y) {
  7.         if (a == 0) {
  8.                 x = 0; y = 1;
  9.                 return b;
  10.         }
  11.         int x1, y1;
  12.         int d = gcd (b%a, a, x1, y1);
  13.         x = y1 - (b / a) * x1;
  14.         y = x1;
  15.         return d;
  16. }
  17. int powm (long long a,int n)
  18. {
  19.         int r = 1;
  20.         while(n)
  21.         {
  22.                 if (n & 1)
  23.                 {
  24.                         r = (r * 1ll * a) % mod;
  25.                 }
  26.                 a = (a * 1ll * a) % mod;
  27.                 n >>= 1;
  28.         }
  29.         return r;
  30. }
  31. int fact[1002];
  32. int Cnm[1002][1002] = {0};
  33. int C(int n,int k)
  34. {
  35.         return Cnm[n][k];
  36.         int res = fact[n];
  37.         int x, y;
  38.         gcd ((fact[n - k] * 1ll * fact[k]) % mod, mod, x, y);
  39.         x = (x % mod + mod) % mod;
  40.         res = (res * 1ll * x) % mod;
  41.         return res;
  42. }
  43. int k;
  44. int pr;
  45. long long n,R;
  46. int dp[1002] = {0};
  47. int f(int k)
  48. {
  49.         if (dp[k] != -1)
  50.                 return dp[k];
  51.         int sum = 0;
  52.         for (int t = 1; t <= k; t++)
  53.         {
  54.                 sum += (C(k,t) * 1ll * f(k - t)) % mod;
  55.                 sum %= mod;
  56.         }
  57.         int dl = ((powm((n + 1) % mod,k) * 1ll * powm(R % mod,n % (mod - 1))) % mod + (mod - 1)) % mod;
  58.         dl = (dl % mod + mod) % mod;
  59.         dl = (dl + mod - sum) % mod;
  60.         dl = (dl * 1ll * (R % mod)) % mod;
  61.         int x,y;
  62.         int dv = (R - 1) % mod;
  63.         gcd (dv, mod, x, y);
  64.         x = (x % mod + mod) % mod;
  65.         return dp[k] = (dl * 1ll * x) % mod;
  66. }
  67. int main()
  68. {
  69.         for (int i = 0; i <= 1001; i++)
  70.         {
  71.                 for (int j = 0; j <= i; j++)
  72.                 {
  73.                         Cnm[i][j] = (i == j ? 1 : (j == 0) ? 1 : ((Cnm[i - 1][j] + Cnm[i - 1][j - 1]) % mod));
  74.                 }
  75.         }
  76.         fact[0] = 1;
  77.         for (int i = 1; i <= 1001; i++)
  78.         {
  79.                 fact[i] = (fact[i - 1] * 1ll * i)  % mod;
  80.         }
  81.         int t;
  82.         cin >> t;
  83.         for (int i = 0; i < t; i++)
  84.         {
  85.                 memset (dp,255,sizeof dp);
  86.                 int k,r;
  87.                 cin >> k >> n >> R;
  88.                 if (k == 0)
  89.                 {
  90.                         if (r == 1)
  91.                                 cout << n << endl;
  92.                         else{
  93.                                 long long ans = powm (R % mod,(n + 1) % (mod - 1)) + (mod - R % mod);
  94.                                 int dv = (R - 1) % mod;
  95.                                 int x,y;
  96.                                 gcd (dv, mod, x, y);
  97.                                 x = (x % mod + mod) % mod;
  98.                                 cout << (ans * 1ll * dv) % mod;
  99.                         }
  100.                 }
  101.                 else
  102.                         cout << f(k) << endl;
  103.         }
  104.         return 0;
  105. }
RAW Paste Data
Ledger Nano X - The secure hardware wallet
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top