Pagini recente » Cod sursa (job #2899682) | Cod sursa (job #66486) | Cod sursa (job #179083) | Cod sursa (job #745550) | Cod sursa (job #2856484)
#include <iostream>
using namespace std;
const int MOD = 1e9 + 7;
const int NMAX = 1e6 + 1;
int q, nmax, n, k;
int fact[NMAX], inv_fact[NMAX];
int fastpow(int base, int exp)
{
int b = base;
int ans = 1;
for(int i = 0; (1 << i) <= exp; i++) {
if((1 << i) & exp)
ans = (1LL * ans * b) % MOD;
b = (1LL * b * b) % MOD;
}
return ans;
}
int comb(int N, int K)
{
if(N < K)
return 0;
if(N == K)
return 1;
return (1LL * (1LL * fact[N] * inv_fact[K]) % MOD * inv_fact[N - K]) % MOD;
}
int main()
{
cin >> nmax >> q;
fact[0] = 1;
for(int i = 1; i <= nmax; i++)
fact[i] = (1LL * fact[i - 1] * i) % MOD;
inv_fact[nmax] = fastpow(fact[nmax], MOD - 2);
for(int i = nmax - 1; i >= 0; i--)
inv_fact[i] = (1LL * inv_fact[i + 1] * (i + 1)) % MOD;
int a, b;
for(int i = 1; i <= q; i++)
cin >> a >> b, cout << comb(a, b) << '\n';
return 0;
}