求组合数(笔记)

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;
}
相关推荐
码之气三段.15 小时前
牛客周赛 Round 145-E(写了200行的史山)
算法·深度优先
Hwang25215 小时前
Attention-04-decoder部分
算法
计算机安禾16 小时前
【算法分析与设计】第13篇:最小生成树:Prim算法与Kruskal算法的比较研究
大数据·人工智能·算法
vortex516 小时前
国密(商用密码)算法核心参数速查
算法·密码学
cany100016 小时前
C++ -- lambda捕获
c++
一条破秋裤16 小时前
【0527】Jetson Nano U-Boot 有线网卡与 VMware 直连网络调试笔记
网络·笔记
快乐得小萝卜17 小时前
笔记:TREX工具-1
笔记·深度学习·机器学习
暴躁小师兄数据学院17 小时前
【AI大模型应用开发工程师特训笔记】第04讲(第 2 章):Python 项目企业级开发规范
人工智能·笔记·python
咸甜适中17 小时前
rust语言学习笔记Trait(十二)Sized、?Sized (大小限制)
笔记·学习·rust
Kilicc_17 小时前
C++知识点—03 <C++宏代码生成/宏反射写法>
c++