fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. const int MAX = 100000;
  6. const int MOD = 1000000007;
  7.  
  8. ll fact[MAX + 1], ifact[MAX + 1];
  9.  
  10. ll bem(ll a, ll n, ll MOD) {
  11. if (n == 0) return 1 % MOD;
  12. ll half = bem(a, n / 2, MOD) % MOD;
  13. ll res;
  14. if (n % 2 == 0) {
  15. res = (half * half) % MOD;
  16. } else {
  17. res = (a * half % MOD * half % MOD) % MOD;
  18. }
  19. return res;
  20. }
  21.  
  22. void precompute() {
  23. fact[0] = 1;
  24. for (ll i = 1; i <= MAX; i++) {
  25. fact[i] = (fact[i - 1] * i) % MOD;
  26. }
  27. ifact[MAX] = bem(fact[MAX], MOD - 2, MOD);
  28. for (ll i = MAX - 1; i >= 0; i--) {
  29. ifact[i] = (ifact[i + 1] * (i + 1)) % MOD;
  30. }
  31. }
  32.  
  33. ll ncr(ll n, ll r) {
  34. if (r < 0 || n < r) return 0;
  35. return (((fact[n] * ifact[r]) % MOD) * ifact[n - r]) % MOD;
  36. }
  37.  
  38. int main() {
  39. precompute();
  40. cout << ncr(4, 2) << endl; // Output: 6
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
6