求组合数(笔记)

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;
}
相关推荐
福尔摩斯张11 小时前
C语言核心:string函数族处理与递归实战
c语言·开发语言·数据结构·c++·算法·c#
江澎涌11 小时前
JHandler——一套简单易用的 C++ 事件循环机制
android·c++·harmonyos
liu****11 小时前
5.C语言数组
c语言·开发语言·c++
毛甘木11 小时前
Unity MonoPInvokeCallback 使用教程
c++·unity
吗~喽11 小时前
【LeetCode】滑动窗口_水果成篮_C++
c++·算法·leetcode
chenzhou__11 小时前
LinuxC语言并发程序笔记(第二十天)
linux·c语言·笔记·学习
立志成为大牛的小牛12 小时前
数据结构——四十九、B树的删除与插入
数据结构·学习·程序人生·考研·算法
BestOrNothing_201512 小时前
【C++基础】Day 4:关键字之 new、malloc、constexpr、const、extern及static
c++·八股文·static·extern·new与malloc·constexpr与const
高洁0112 小时前
具身智能-普通LLM智能体与具身智能:从语言理解到自主行动 (2)
深度学习·算法·aigc·transformer·知识图谱
无敌最俊朗@12 小时前
如何把一个压缩的视频文件,解压成一张张原始图片-decode_video.c
c++