C++ 数论相关题目 求组合数Ⅱ

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

输入格式
第一行包含整数 n

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

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

数据范围
1≤n≤10000
,
1≤b≤a≤105
输入样例:
3
3 1
5 3
2 2
输出样例:
3
10
1
C++ 数论相关题目 求组合数Ⅱ_第1张图片
除的时候可能是小数,可以变成逆元, 除以就等于乘以逆元。

#include 
#include 

typedef long long LL;
using namespace std;

const int N = 100010, mod = 1e9 + 7;
int fact[N], infact[N]; //fact[i] 存储 i!的值。
                        //infact[i] 存储 i!的逆元的值。

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

int main ()
{
    fact[0] = infact[0] = 1;
    for(int i = 1; i < N; i ++ )
    {
        fact[i] = (LL)fact[i - 1] * i % mod;
        infact[i] = (LL)infact[i - 1] * qmi(i, mod - 2, mod) % mod;
    }
    int n;
    scanf("%d", &n);
    while(n -- )
    {
        int a, b;
        scanf("%d%d", &a, &b);
        printf("%d\n", (LL)fact[a] * infact[b] % mod * infact[a - b] % mod);
    }
    
    return 0;
}

你可能感兴趣的:(算法笔记,数论,力扣,c++,算法)