当前位置:网站首页>组合数模板
组合数模板
2022-08-10 07:56:00 【ThXe】
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10,mod=1e9+7;
typedef long long ll;
struct CalC {
ll f[N], inff[N];
ll imp(ll a, ll k, ll q) {
ll res = 1;
while (k) {
if (k & 1) res = res * a % q;
a = a * a % q;
k >>= 1;
}
return res;
}
void init() {
f[0] = inff[0] = 1;
for (int i = 1; i < N; i++) {
f[i] = f[i - 1] * i % mod;
inff[i] = inff[i - 1] * imp(i, mod - 2, mod) % mod;
}
}
ll C(ll a, ll b) {
if (a == b)return 1;
if (a < b)return 0;
return f[a] * inff[b] % mod * inff[a - b] % mod;
}
int lucas_C(ll a, ll b, ll p)/
{
if (a < b) return 0;
int down = 1, up = 1;
for (int i = a, j = 1; j <= b; i--, j++)
{
up = up * i % p;
down = down * j % p;
}
return up * imp(down, p - 2, p) % p;//其实优化之处就是把原本每次for循环都要qmi求的逆元优化到最后一步返回值的时候来求解
}
int lucas(ll a, ll b, ll p)///O(plogn)p为取模质数
{
if (a < p && b < p) return lucas_C(a, b, p);//这一步从定义出发计算即可
return lucas_C(a % p, b % p, p) * lucas(a / p, b / p, p) % p;
//a%p后肯定是<p的,所以可以用C(),但a/p后不一定<p 所以用lucas继续递归
}
}Cal;
int main() {
Cal.init();
int n; cin >> n;
while (n--)
{
ll a, b, p; cin >> a >> b >> p;
cout << Cal.lucas(a, b, p) << endl;
}
}
边栏推荐
- 第2章 变量和基本类型读书笔记
- 详解构建mock服务最方便的神器——Moco
- The precise effect of network integration promotion outsourcing in the era of Internet of Things-Shenzhen Win-Win World News
- C# 获取PCI等设备的插槽位置信息
- 机器人控制器编程实践指导书旧版-实践一 LED灯(数字量)
- 概率分布及其应用
- .NET-7.WPF learning experience summary
- 基于STC8G2K64S4单片机通过OLED屏幕显示模拟量光敏模拟值
- DGIOT支持工业设备租赁以及远程管控
- 自动化测试框架Pytest(二)——前后置处理
猜你喜欢

2022-08-01 Advanced Network Engineering (24) STP Advanced Knowledge

AFNetworking概述和4.0的实践

时序动作定位 | ACGNet:弱监督时序动作定位的动作补充图网络(AAAI 2022)

每日一题,二叉树中增加一行

概率分布及其应用

自动化测试框架Pytest(三)——自定义allure测试报告

人工神经网络工作原理,神经网络的工作原理

明明加了唯一索引,为什么还是产生重复数据?

navicat for mysql 连接时报错:1251-Client does not support authentication protocol requested by server

iwemeta元宇宙:阿里首任COO:如何打造销售铁军
随机推荐
AFNetworking概述和4.0的实践
时序动作定位 | ACGNet:弱监督时序动作定位的动作补充图网络(AAAI 2022)
Is the write performance of raid5 faster than raid10?
二叉树 --- 堆
Nude speech - lying flat - brushing questions - big factory (several tips for Android interviews)
详解构建mock服务最方便的神器——Moco
Power function Exponential function Logarithmic function
phpstudy starts automatically
The probability distribution and its application
day16--抓包工具Charles的使用
同步锁synchronized追本溯源
如何远程调试对方的H5页面
[In-depth study of 4G/5G/6G topic-56]: L3 signaling control-5-radio bearer management
人工神经网络工作原理,神经网络的工作原理
pytest之parametrize参数化
自动化测试框架Pytest(二)——前后置处理
大佬,oracle单表增量同步时候源库服务器额外占用内存近2g,这不正常吧
Uni applet Tencent map polygon background transparency
Rust learning: 6.4_ enumeration of composite types
自动化测试框架搭建 ---- 标记性能较差用例