P3807 【模板】卢卡斯定理
P3807 【模板】卢卡斯定理
求 \(C_{m + n}^{m} \% p\) ( \(1\le n,m,p\le 10^5\) )
错误日志: 数组开小(哇啊啊啊洼地hi阿偶我姑父阿贺佛奥UFO爱我帮你)
Pre
好的我们继续恶补数学
首先复习一下 \(O(N)\) 求质数逆元的方法$$inv[1] = 1$$$$inv[i] = (p - p / i) * inv[p % i] % p (i >= 2)$$
LL inv[maxn];
void get_inv(LL n){
inv[1] = 1;
for(LL i = 2;i <= n;i++)inv[i] = (p - p / i) * inv[p % i] % p;
}
然后是 \(O(m)\) 求 \(C_{n}^{m} \% p\):$$C_{n}^{m}% p = \frac{n!}{m!(n - m)!}% p$$$$=\frac{(n - m + 1) * (n - m +2) * ... * n}{m!}% p$$$$=(\frac{n - m + 1}{1}% p) * (\frac{n - m + 2}{2}% p) * ... * (\frac{n}{m}% p)$$
其中除法取模可以用上面的逆元计算, 求解一个组合数的复杂度为 \(O(m)\)
LL C(LL n, LL m){
LL ans = 1;
for(LL i = 1;i <= m;i++)ans = ans * (n - m + i) * inv[i] % p;
return ans;
}
最后就是卢卡斯定理, 当 \(p\) 为质数时有:$$C_{n}^{m} % p = C_{n % p}^{m % p} * C_{n / p}^{m / p} % p$$
其中取模过了的部分可以很快的计算出来, 另一部分继续递归卢卡斯即可
LL lucas(LL n, LL m, LL p){
if(m == 0)return 1;
return C(n % p, m % p) * lucas(n / p, m / p, p) % p;
}
Solution
于是乎掌握了上边的知识后就变成裸题啦
Code
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#define LL long long
using namespace std;
LL RD(){
LL out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const LL maxn = 200019;
LL n, m, p;
LL inv[maxn];
void get_inv(LL n){
inv[1] = 1;
for(LL i = 2;i <= n;i++)inv[i] = (p - p / i) * inv[p % i] % p;
}
LL C(LL n, LL m){
LL ans = 1;
for(LL i = 1;i <= m;i++)ans = ans * (n - m + i) * inv[i] % p;
return ans;
}
LL lucas(LL n, LL m, LL p){
if(m == 0)return 1;
return C(n % p, m % p) * lucas(n / p, m / p, p) % p;
}
int main(){
LL T = RD();
while(T--){
n = RD(), m = RD(), p = RD();
get_inv(m);
printf("%lld\n", lucas(n + m, m, p));
}
return 0;
}
P3807 【模板】卢卡斯定理的更多相关文章
- 【洛谷P3807】(模板)卢卡斯定理
卢卡斯定理 把n写成p进制a[n]a[n-1][n-2]…a[0],把m写成p进制b[n]b[n-1][n-2]…b[0],则C(n,m)与C(a[n],b[n])*C(a[n-1],b[n-1])* ...
- 887. 求组合数 III(模板 卢卡斯定理)
a,b都非常大,但是p较小 前边两种方法都会超时的 N^2 和NlongN 可以用卢卡斯定理 P*longN*longP 定义: 代码: import java.util.Scanner ...
- 洛谷.3807.[模板]卢卡斯定理(Lucas)
题目链接 Lucas定理 日常水题...sublime和C++字体死活不同步怎么办... //想错int范围了...不要被longlong坑 //这个范围现算阶乘比预处理快得多 #include &l ...
- 【数论】卢卡斯定理模板 洛谷P3807
[数论]卢卡斯定理模板 洛谷P3807 >>>>题目 [题目] https://www.luogu.org/problemnew/show/P3807 [输入格式] 第一行一个 ...
- 洛谷 P3807 【模板】卢卡斯定理
P3807 [模板]卢卡斯定理 题目背景 这是一道模板题. 题目描述 给定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤105) 求 C_{n+m}^{m}\ mod\ pCn+mm ...
- 洛谷——P3807 【模板】卢卡斯定理
P3807 [模板]卢卡斯定理 洛谷智推模板题,qwq,还是太弱啦,组合数基础模板题还没做过... 给定n,m,p($1\le n,m,p\le 10^5$) 求 $C_{n+m}^{m}\ mod\ ...
- 【luogu P3807】【模板】卢卡斯定理/Lucas 定理(含 Lucas 定理证明)
[模板]卢卡斯定理/Lucas 定理 题目链接:luogu P3807 题目大意 求 C(n,n+m)%p 的值. p 保证是质数. 思路 Lucas 定理内容 对于非负整数 \(n\),\(m\), ...
- 【刷题】洛谷 P3807 【模板】卢卡斯定理
题目背景 这是一道模板题. 题目描述 给定\(n,m,p( 1\le n,m,p\le 10^5)\) 求 \(C_{n+m}^{m}\ mod\ p\) 保证 \(p\) 为prime \(C\) ...
- P3807【模板】卢卡斯定理
题解大部分都是递归实现的,给出一种非递归的形式 话说上课老师讲的时候没给代码,然后自己些就写成了这样 对于质数\(p\)给出卢卡斯定理: \[\tbinom{n}{m}=\tbinom{n \bmod ...
随机推荐
- 1014 C语言文法定义与C程序的推导过程
<程序> -> <外部声明> | <程序> <外部声明> <外部声明> -> <函数定义> | <声明> ...
- cxGrid 单元格回车移到下一行,当移到最后一个单元格时回车新增一行【转】
1 在TcxGridDBTableView中,设定属性 NewItemRow.Visible = True 2 在cxgrid中输入数据怎样回车换行 在TcxGridDBTableView中 将属 ...
- 增加kms计数
@echo offset skms=10.15.68.62for %%i in (. . . . . . . . . . . . . . . . . . . . . . . . . .) do cal ...
- scala 有 + 运算符吗? - 03
scala 有运算符吗? 答案是没有. package com.msym /** * Created by ACER on 2017/7/4. */ object Demo { def main(ar ...
- 使用 Idea 打 scala程序的 jar 包 - 02
Artifact ——>+ ——>JAR ——>From modules with dependencies 选择 Module,选择主函数,OK——>OK 勾选Includ ...
- linux中创建和解压文档的 tar 命令教程
linux & zip & tar https://www.cnblogs.com/xgqfrms/p/9714161.html 1 linux中的tar命令 tar(磁带归档)命令是 ...
- java.io.FileNotFoundException: generatorConfig.xml (系统找不到指定的文件。)
在使用MyBatis的逆向工程生成代码时,一直报错java.io.FileNotFoundException: generatorConfig.xml (系统找不到指定的文件.),如图 文件结构如下: ...
- Python学习---字符串操作
### 截取字符串然后拼接 str = "Hello World!" str2 = str[:6] + "tyche !" print(str2) ===> ...
- DAY7-Python学习笔记
前记: 这几天在弄小程序,view页面的开发很简单,但是在加载图片上遇到了问题,小程序的大小不能超过2M,所以大部分的图片内容要通过request请求服务器来获取,这里之前学习小程序的时候是通过网站A ...
- P2325 [SCOI2005]王室联邦
题目描述 “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. 他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不同的城市之间 ...