求组合数(笔记)

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;
}
相关推荐
别动我齐刘海25 分钟前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
171320330计算机毕设编程25 分钟前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
姜鱼问生38 分钟前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构
不会就选b43 分钟前
算法日常・每日刷题--<动态规划>23
算法·动态规划
GreatSQL社区1 小时前
主从复制SQL线程中断——字符集砸出的坑
java·数据库·算法
ZZHow10242 小时前
Ascend C算子开发(高级)笔记
c++·人工智能·笔记·深度学习·华为云
Tisfy2 小时前
LeetCode 2333.最小差值平方和:排序 + 数学计算(不用二分)
数学·算法·leetcode·题解·贪心·排序
aqiu1111112 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
PC2005-cloud2 小时前
Mysql学习笔记:InnoDB Cluster 集群从零搭建实战,基于 Docker 实现高可用读写分离架构
笔记·学习·mysql
lojox2 小时前
深入理解 C++ STL:vector 底层实现、迭代器失效与 list 特性
开发语言·c++