求组合数(笔记)

cpp 复制代码
//组合数2,取值在1e5
//Cab = a! / (a - b)! * b!
#include<iostream>
using namespace std;
using ll = long long;
const ll N = 1e4 + 9, mod = 1e9 + 7;
ll fact[N], infact[N];//阶乘,逆元阶乘

ll qmi(ll a, ll k, ll p)//逆元模板
{
	ll res = 1;

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

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	fact[0] = infact[0] = 1;
    //初始化数组
	for (ll i = 1; i < N; ++i)
	{
		fact[i] = fact[i - 1] * i % mod;
		infact[i] = infact[i - 1] * qmi(i, mod - 2, mod) % mod;
	}

	int n; cin >> n;

	while (n--)
	{
		int a, b; cin >> a >> b;
        //多取模的原因是防止超出long long的数据范围
		cout << fact[a] * infact[a - b] % mod * infact[b] % mod << '\n';
	}
	return 0;
}
相关推荐
Answer1st13 小时前
【FPGA学习】在线调试方法(四)
笔记
云析赢指标公式网413 小时前
通达信ATAN均线角度公式源码笔记:四周期角度计算与DRAWBAND色带实现
笔记·算法
01二进制代码漫游日记13 小时前
[C++]之内存管理(一)
jvm·c++·学习
21岁被迫秃头14 小时前
SVT-AV1 Mini-Gop决策算法详解+源码分析.md
算法·av1·svt-av1·源码详解·mini-gop决策
Kobebryant-Manba14 小时前
IEKT向量矩阵流程&评估
人工智能·算法·矩阵
蒸蒸yyyyzwd14 小时前
学习笔记day92
笔记·八股
codebolt14 小时前
C++程序crash分析和内存检测
开发语言·c++
Js.Tx14 小时前
【具体数学 Concrete Mathematics】2.1.7 无限和式
算法·具体数学
ShineWinsu14 小时前
对于Qt:QLabel常见属性的解析
c++·qt·面试·笔试·gui·标签·qlabel
kk_net889914 小时前
FSNotes:macOS 和 iOS 上的开源笔记管理器
笔记·其他·macos·ios