Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- #define long ll
- #define all(x) begin(x), end(x)
- const int MOD = 1e9 + 7;
- const int N = 1e6;
- int add(int a, int b) {
- return (a + b) % MOD;
- }
- int sub(int a, int b) {
- return (a + MOD - b) % MOD;
- }
- int mul(int a, int b) {
- return (int)((long)a * b % MOD);
- }
- int power_mod(int a, int p) {
- int x = 1;
- for (; p > 0; p >>= 1) {
- if (p & 1) {
- x = mul(x, a);
- }
- a = mul(a, a);
- }
- return x;
- }
- int divide(int a, int b) {
- return mul(a, power_mod(b, MOD - 2));
- }
- int fact[N], invfact[N];
- int c_func(int n, int k) {
- assert(0 <= k && k <= n);
- return mul(fact[n], mul(invfact[k], invfact[n - k]));
- }
- int a_func(int n, int k) {
- assert(0 <= k && k <= n);
- return mul(fact[n], invfact[n - k]);
- }
- int main() {
- #ifdef LC
- //assert(freopen("input.txt", "r", stdin));
- #endif
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- fact[0] = 1;
- for (int i = 1; i < N; ++i) {
- fact[i] = mul(fact[i - 1], i);
- }
- invfact[N - 1] = divide(1, fact[N - 1]);
- for (int i = N - 2; i >= 0; --i) {
- invfact[i] = mul(invfact[i + 1], i + 1);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement