求组合数(笔记)

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;
}
相关推荐
神仙别闹12 分钟前
基于QT(C++)实现Windows 自启动项查看和分析
c++·windows·qt
微露清风21 分钟前
模拟算法学习记录
学习·算法
mifengxing33 分钟前
计算机组成原理概述
笔记·考研·计算机组成原理·复习笔记
WWTYYDS_6661 小时前
ProtoBuf超详细使用教程
c++
问商十三载1 小时前
2026法律行业AI引擎生成式优化怎么优化?三层专业加固提排名,零成本提33%引用率附适配表
java·前端·人工智能·算法
野生风长1 小时前
c++类和对象(this指针,重载operator,习题总结)
java·开发语言·c++
最后的最后、7961 小时前
SQLi-Labs 六关 SQL 注入过关笔记
数据库·笔记·sql
雪的季节1 小时前
Python「假多态」与 C++「真多态」的核心区别
开发语言·c++
zander2581 小时前
138. 随机链表的复制
数据结构·算法·链表