求组合数(笔记)

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;
}
相关推荐
小白不想白a30 分钟前
每日手撕算法--哈希映射/链表存储数求和
数据结构·算法
剪一朵云爱着1 小时前
力扣2080. 区间内查询数字的频率
算法·leetcode
落日漫游1 小时前
数据结构笔试核心考点
java·开发语言·算法
Dream it possible!1 小时前
LeetCode 面试经典 150_栈_有效的括号(52_20_C++_简单)(栈+哈希表)
c++·leetcode·面试··哈希表
kyle~1 小时前
C++--- override 关键字 强制编译器验证当前函数是否重写基类的虚函数
java·前端·c++
HY小海1 小时前
【C++】AVL树实现
开发语言·数据结构·c++
workflower2 小时前
Fundamentals of Architectural Styles and patterns
开发语言·算法·django·bug·结对编程
仰泳的熊猫2 小时前
LeetCode:701. 二叉搜索树中的插入操作
数据结构·c++·算法·leetcode
kali-Myon2 小时前
NewStarCTF2025-Week2-Pwn
算法·安全·gdb·pwn·ctf·栈溢出
老四啊laosi2 小时前
[双指针] 1. 力扣283.移动零
算法·leetcode·双指针·移动零