Advertisement
istinishat

moduler arithmetic

Sep 24th, 2017
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define si(n) scanf("%d",&n)
  5. #define ll long long
  6. #define MAX 200005
  7. #define f first
  8. #define s second
  9.  
  10. const int mod=(int) 1e9+7;
  11. ll fact[MAX],inv[MAX];
  12.  
  13. int bigmod(ll a,ll p)
  14. {
  15.     long long ret = 1;
  16.     while(p) {
  17.         if(p & 1) ret = ret * a % mod;
  18.         a = a * a % mod;
  19.         p >>= 1;
  20.     }
  21.     return ret;
  22. }
  23.  
  24. int mod_add(ll a,ll b) {
  25.   a+=b;
  26.   if(a>=mod) a-=mod;
  27.   return a;
  28. }
  29.  
  30. int mod_sub(ll a,ll b) {
  31.   a-=b;
  32.   if (a<0) a+=mod;
  33.   return a;
  34. }
  35.  
  36. int mod_mul(ll a, ll b) {
  37.   return (a*b)%mod;
  38. }
  39.  
  40. int mod_div(ll a,ll b)
  41. {
  42.     return mod_mul(a,bigmod(b,mod-2));
  43. }
  44.  
  45.  
  46. int mod_power(int a,int b) {
  47.   int res=1;
  48.   while (b>0) {
  49.     if (b&1) {
  50.       res=mod_mul(res,a);
  51.     }
  52.     a=mod_mul(a,a);
  53.     b>>=1;
  54.   }
  55.   return res;
  56. }
  57.  
  58. void factorial()
  59. {
  60.     fact[0]=1;
  61.     inv[0]=1;
  62.     for(int i=1;i<MAX;i++){
  63.         fact[i]=mod_mul(fact[i-1],i);
  64.         inv[i]=mod_power(fact[i],mod-2);
  65.     }
  66. }
  67.  
  68. ll nCr(ll n,ll r)
  69. {
  70.     if(r>n)return 0;
  71.     ll ret=fact[n];
  72.     ret=(ret*inv[r])%mod;
  73.     ret=(ret*inv[n-r])%mod;
  74.  
  75.     return ret;
  76. }
  77.  
  78.  
  79. int main()
  80. {
  81.     //freopen("input.txt","r",stdin);
  82.     factorial();
  83.  
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement