求组合数(笔记)

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;
}
相关推荐
210Brian几秒前
嘉立创EDA硬件设计与实战学习笔记(三):51单片机核心板原理图设计
笔记·学习·51单片机
散峰而望1 分钟前
【数据结构】单调栈与单调队列深度解析:从模板到实战,一网打尽
开发语言·数据结构·c++·后端·算法·github·推荐算法
qwehjk20083 分钟前
内存泄漏自动检测系统
开发语言·c++·算法
tankeven6 分钟前
HJ153 实现字通配符*
c++·算法
草莓熊Lotso8 分钟前
MySQL 多表连接查询实战:内连接 + 外连接
android·运维·数据库·c++·mysql
旖-旎9 分钟前
位运算(两整数之和)(3)
c++·算法·leetcode·位运算
杨校9 分钟前
杨校老师课堂备战C++之数据结构中栈结构专题训练
开发语言·数据结构·c++
2301_8166512213 分钟前
C++与Rust交互编程
开发语言·c++·算法
ab15151715 分钟前
3.28完成9、16、20、98、100、55、57
算法
带娃的IT创业者21 分钟前
营养食谱推荐引擎:基于规则与协同过滤的混合算法
算法·规则引擎·协同过滤·健康管理·食谱推荐·营养搭配·家庭饮食