求组合数(笔记)

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;
}
相关推荐
胖大和尚7 小时前
在C++的类中,是否可以把函数声明成__device__
c++·cuda
脚踏实地皮皮晨7 小时前
003003001_Grid控件
开发语言·windows·算法·c#·visual studio
十年磨剑走天涯7 小时前
C++ STL 容器操作复杂度速查表
开发语言·c++
Hi李耶7 小时前
【LeetCode】6-Z字形变换
算法·leetcode·职场和发展
ziguo11227 小时前
Windows API MessageBox 函数详解
c语言·c++·windows·visualstudio
王老师青少年编程7 小时前
2023年CSP-J初赛真题及答案解析(11-15)
c++·真题·csp-j·答案·csp·初赛·信奥赛
15Moonlight7 小时前
C++进阶(09):特殊类设计
开发语言·c++
XiaoYu1__7 小时前
算法进阶·其一:用SCC、Tarjan算法与缩点思想解决有向图的连通关系及2-SAT问题的拓展
算法
小O的算法实验室7 小时前
AAAI-26,全局相关性学习:通过谱图神经网络增强进化算法
神经网络·学习·算法
xqqxqxxq7 小时前
DML 表数据:插入、删除、修改
笔记·mysql