求组合数(笔记)

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 分钟前
学习笔记(C++篇)—— Day 6
笔记·学习
随意起个昵称16 分钟前
【双指针】供暖器
算法
倒霉蛋小马19 分钟前
最小二乘法拟合直线,用线性回归法、梯度下降法实现
算法·最小二乘法·直线
YueiL31 分钟前
基于RK3588的智慧农场系统开发|RS485总线|华为云IOT|node-red|MQTT
c++·物联网·华为云·rk3588·rs485
二进制人工智能36 分钟前
【OpenGL学习】(二)OpenGL渲染简单图形
c++·opengl
codists43 分钟前
《算法导论(第4版)》阅读笔记:p82-p82
算法
埃菲尔铁塔_CV算法1 小时前
深度学习驱动下的目标检测技术:原理、算法与应用创新
深度学习·算法·目标检测
霸王蟹1 小时前
React Fiber 架构深度解析:时间切片与性能优化的核心引擎
前端·笔记·react.js·性能优化·架构·前端框架
~巴哥~1 小时前
mcp学习笔记
笔记·学习
Dream it possible!1 小时前
LeetCode 热题 100_寻找重复数(100_287_中等_C++)(技巧)(暴力解法;哈希集合;二分查找)
c++·leetcode·哈希算法