Guest User

Untitled

a guest
Apr 20th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. #include<vector>
  4.     /* This function calculates (a^b)%MOD */
  5.     long long pow(int a, int b, int MOD)
  6.     {
  7.         long long x=1,y=a;
  8.         while(b > 0)
  9.         {
  10.             if(b%2 == 1)
  11.             {
  12.                 x=(x*y);
  13.                 if(x>MOD) x%=MOD;
  14.             }
  15.             y = (y*y);
  16.             if(y>MOD) y%=MOD;
  17.             b /= 2;
  18.         }
  19.         return x;
  20.     }
  21.      
  22.     /*  Modular Multiplicative Inverse
  23.         Using Euler's Theorem
  24.         a^(phi(m)) = 1 (mod m)
  25.         a^(-1) = a^(m-2) (mod m) */
  26.     long long InverseEuler(int n, int MOD)
  27.     {
  28.         return pow(n,MOD-2,MOD);
  29.     }
  30.      
  31.     long long C(int n, int r, int MOD)
  32.     {
  33.          if(r<=0||r>n) return 1;
  34.         vector<long long> f(n,1);
  35.         for (int i=2; i<=n;i++)
  36.             f[i]= (f[i-1]*i) % MOD;
  37.         return (f[n]*((InverseEuler(f[r], MOD) * InverseEuler(f[n-r], MOD)) % MOD)) % MOD;
  38.     }
  39.  
  40. main()
  41. {
  42.  
  43.       long long n=1,k=1,l,tmp;
  44.       while(n!=0&&k!=0)
  45.       {
  46.                        cin>>n>>k;
  47.                        l=k+1;
  48.                        if(l%2==0)
  49.                        {
  50.                           tmp= 2* pow( C(n-2,(l/2)-1,1000000007),2,1000000007);
  51.                        }
  52.                        else
  53.                            tmp=2*C(n-2,(l-1)/2,1000000007)*C(n-2,(l-3)/2,1000000007);
  54.                        cout<<tmp<<"\n";
  55.       }
  56.       return 0;
  57. }
Add Comment
Please, Sign In to add comment