求组合数(笔记)

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;
}
相关推荐
roman_日积跬步-终至千里1 天前
【算法五】从斐波那契到动态规划:自顶向下、自底向上与状态压缩
算法·动态规划
从零开始的嵌入式之旅1 天前
day31
linux·c语言·经验分享·笔记·嵌入式硬件
小张帅三代1 天前
yolo基础学习笔记
笔记·学习·yolo
北风toto1 天前
UML(统一建模语言)详细笔记
笔记·uml·软件设计师
wuyk5551 天前
9.冒泡排序:像鱼缸泡泡一样的简单排序算法
开发语言·stm32·单片机·算法·排序算法
ouynagda1 天前
Linux 进程与线程学习笔记
linux·笔记·学习
渡我白衣1 天前
深入理解 Transformer:Transformer 究竟是什么?
java·linux·开发语言·c++·人工智能·深度学习·transformer
无限码力1 天前
8.26华为OD机试真题 新系统【字符串回文判断】
算法·华为od·华为od机考·华为od机试·华为od上机考试真题·华为od最新机试真题题解·华为od机试真题题库
玖玥拾1 天前
LeetCode 125 验证回文串
算法·leetcode
GlueNa2SiO31 天前
03-Flask模板引擎Jinja2详解
笔记·python·flask