求组合数(笔记)

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;
}
相关推荐
czhc11400756633 分钟前
Java117 最长公共前缀
java·数据结构·算法
java 乐山7 分钟前
蓝牙网关(备份)
linux·网络·算法
云泽80814 分钟前
快速排序算法详解:hoare、挖坑法、lomuto前后指针与非递归实现
算法·排序算法
数字化脑洞实验室15 分钟前
智能决策算法的核心原理是什么?
人工智能·算法·机器学习
流烟默15 分钟前
机器学习中拟合、欠拟合、过拟合是什么
人工智能·算法·机器学习
Brianna Home16 分钟前
现代C++:从性能泥潭到AI基石
开发语言·c++·算法
再卷也是菜17 分钟前
算法基础篇(10)递归型枚举与回溯剪枝
算法·深度优先·剪枝
吃着火锅x唱着歌24 分钟前
LeetCode 2016.增量元素之间的最大差值
数据结构·算法·leetcode
qq192572302731 分钟前
c++特性
开发语言·c++·算法
徐子童33 分钟前
FloodFill---BFS
算法·bfs·宽度优先·队列·floodfill