其他分享
首页 > 其他分享> > 886. 求组合数 II

886. 求组合数 II

作者:互联网

886. 求组合数 II

给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(1e9+7) 的值。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含一组 a 和 b。

输出格式

共 n 行,每行输出一个询问的解。

数据范围

1≤n≤1e4,
1≤b≤a≤1e5

输入样例:


3
3 1
5 3
2 2

输出样例:

3
10
1

捕获27.PNG

代码:

//预处理阶乘
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10, mod = 1e9 + 7;
typedef long long LL;

LL fact[N], infact[N]; //阶乘的模,阶乘逆元的模

LL quick_pow(int a, int k, int p)
{
    LL res = 1;
    while (k)
    {
        if (k & 1)
            res = res * a % p;
        k >>= 1;
        a = (LL)a * a % p;
    }
    return res;
}

int main()
{
    fact[0] = infact[0] = 1;
    for (int i = 1; i < N; i++)
    {
        fact[i] = fact[i - 1] * i % mod;
        infact[i] = infact[i - 1] * quick_pow(i, mod - 2, mod) % mod;
    }

    int n;
    cin >> n;
    while (n--)
    {
        int a, b;
        cin >> a >> b;
        cout << fact[a] * infact[b] % mod * infact[a - b] % mod << endl;
        //三个相乘可能越界
    }
    return 0;
}

标签:886,组合,int,res,LL,II,infact,fact,mod
来源: https://blog.csdn.net/segegse/article/details/122664697