题目链接

戳我

前置知识

  1. 中国剩余定理(crt)或扩展中国剩余定理(excrt)
  2. 乘法逆元
  3. 组合数的基本运用
  4. 扩展欧几里得(exgcd)

说实话Lucas真的和这个没有什么太大的关系,但是Lucas还是要学学的:戳我

正文

题目是要求:
\[c_n^m mod \ p\]

如果这个p是质数的话那太简单了,直接Lucas就好了,但问题是现在p不一定是一个质数。

我们令 \(P=\prod {p_i}^{c_i}\)

我们如果知道每个\(c_n^m mod \ p_i^{c_i}\)的值的话就可以根据中国剩余定理求出答案
那我们怎么求出这个值呢?
我们可以将\(c_n^m\)写成\(\frac{n!}{m!(n-m)!}\)

现在我们可以处理阶乘的模。那么如何处理阶乘的模呢?

举个经典例子:
\(p=3,n=19,c=2\)时
我们可以吧式子写成这样:
\[(19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2*1)\]
\[=(19*17*16*14*13*11*10*8*7*5*4*2*1)*3^6*6!\]
我们可以将他分为几个部分
\[19*(17*16*14*13*11*10)*(8*7*5*4*2*1)*3^6*6!\]

我们会发现对于每一个整的部分如\((8*7*5*4*2*1)\)的模数都是一样的,于是这一块我们可以运用快速幂,而剩余的\(19\)我们可以进行暴力。对于\(6!\)我们可以继续递归求解,那么怎么分组呢
我们可以把每一段的范围定为\(p^c\)。差不多就这样吧。

code

#include<bits/stdc++.h>
#define rg register
#define int long long
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();return f*x;
}
inline void exgcd(int a,int b ,int &x,int &y){if(!b){x=1,y=0;return;}exgcd(b,a%b,x,y);int t=x;x=y,y=t-(a/b)*y;
}
inline int inv(int a,int b){int x,y;return exgcd(a,b,x,y),(x%b+b)%b;
}
inline int ksm(int a,int b,int p){int ans=1;while(b){if(b&1)ans=a*ans%p;a=a*a%p;b>>=1;}return ans%p;
}
inline int crt(int x,int p,int mod){return inv(p/mod,mod)*(p/mod)*x;
}
inline int fac(int x,int a,int b){if(!x)return 1;int ans=1;for(int i=1;i<=b;i++)if(i%a)ans*=i,ans%=b;ans=ksm(ans,x/b,b);for(int i=1;i<=x%b;i++)if(i%a)ans*=i,ans%=b;return ans*fac(x/a,a,b)%b;
}
inline int C(int n,int m,int a,int b){int N=fac(n,a,b),M=fac(m,a,b),Z=fac(n-m,a,b),sum=0;for(int i=n;i;i=i/a)sum+=i/a;for(int i=m;i;i=i/a)sum-=i/a;for(int i=n-m;i;i=i/a)sum-=i/a;return N*ksm(a,sum,b)%b*inv(M,b)%b*inv(Z,b)%b;
}
inline void exlucas(int n,int m,int p){int t=p,ans=0;for(int i=2;i*i<=p;i++){int k=1;while(t%i==0)k*=i,t/=i;ans+=crt(C(n,m,i,k),p,k),ans%=p;}if(t>1)ans+=crt(C(n,m,t,t),p,t),ans%=p;printf("%d",ans%p);
}
main(){int n=read(),m=read(),p=read();exlucas(n,m,p);return 0;
}

转载于:https://www.cnblogs.com/hbxblog/p/10211177.html

扩展卢卡斯定理(Exlucas)相关推荐

  1. P4720 【模板】扩展卢卡斯定理/exLucas(无讲解,纯记录模板)

    P4720 [模板]扩展卢卡斯定理/exLucas 题意: CnmmodpC_{n}^{m}\bmod pCnm​modp 对于 100% 的数据,1≤m≤n≤1018,2≤p≤106,不保证 p 是 ...

  2. 洛谷 P4720 【模板】扩展卢卡斯定理/exLucas

    [模板]扩展卢卡斯定理/exLucas 题目背景 这是一道模板题. 题目描述 求 Cnmmodp{\mathrm{C}}_n^m \bmod{p}Cnm​modp 其中 C\mathrm{C}C 为组 ...

  3. 【数学】扩展卢卡斯定理

    Description 求 ( n m ) m o d p \dbinom{n}{m}\bmod p (mn​)modp 其中 p p p 较小且 不保证 p p p 是质数. Method 前置芝士 ...

  4. 【知识总结】扩展卢卡斯定理(exLucas)

    扩展卢卡斯定理用于求如下式子(其中 p p p不一定是质数): C n m m o d p C_n^m\ mod\ p Cnm​ mod p 我们将这个问题由总体到局部地分为三个层次解决. 层次一:原 ...

  5. 『数学』--数论--组合数+卢卡斯定理+扩展卢卡斯定理

    组合数: 在N个数中选取M个数,问选的方式有几种? 直接递归暴力简单 #include<cstdio> const int N = 2000 + 5; const int MOD = (i ...

  6. 组合数学 —— 组合数取模 —— 卢卡斯定理与扩展卢卡斯定理

    [卢卡斯定理] 1.要求:p 是质数,m.n 很大但 p 很小 或者 n.m 不大但大于 p 2.定理内容 其中, 3.推论 当将 n 写成 p 进制:,将 m 写成 p 进制: 时,有: 4.实现 ...

  7. 数论-卢卡斯定理(lucas)与拓展卢卡斯定理 (exlucas)

    卢卡斯定理(lucas) [用途] 求解 C n m % p C_{n}^{m}\% p Cnm​%p,其中m,n较大,p较小且为素数 [结论] C n m ≡ C n / p m / p C n % ...

  8. OI模板 卢卡斯定理

    卢卡斯定理 / Lucas\text{Lucas}Lucas定理 现有问题: 给定整数 n,m,pn,m,pn,m,p,求 (nm)modp\dbinom{n}{m}\bmod p(mn​)modp, ...

  9. 卢卡斯定理扩展卢卡斯

    卢卡斯定理&扩展卢卡斯 Lucas EXlucas 例题 Lucas 卢卡斯定理: ( m n ) = ( m p n p ) ∗ ( m ( m o d p ) n ( m o d p ) ...

最新文章

  1. ST3新建py2和py3的build system
  2. Vue 学习第四天 -2
  3. java自学之路-day17
  4. 微软 Build 2019:Windows 10 隐退,IE 重生,Azure 成主角
  5. Intellij idea利用Statistic插件统计项目代码行数
  6. jQuery UI =jquery-ui.js中sortable方法拖拽对象位置偏移问题
  7. Unity Qualcomm 3D音频插件
  8. comsol积分函数_空间与时间的积分方法概述
  9. Python Pandas实现简单Excel数据表合并
  10. HttpResponse 417
  11. 中国ERP三大流程 国外ERP黯然失色
  12. 趣店PHP面经_腾讯助理PHP开发工程师外包岗面经
  13. 基于hal的hcsr04使用注意事项(f103c8t6)
  14. 下拉框触发单击事件_谈谈如何给下拉框option添加点击事件?
  15. 【Excel】excel中怎样隔行插入空行?
  16. 浮点数转换为大写货币金额
  17. clickhouse表引擎-合并树系列
  18. 将图片集合成一个视频
  19. 关于CDN和DNS技术的解析以及搭建智能DNS的方法
  20. Java 23种设计模式系列之观察者模式(常用)

热门文章

  1. 辞职前一定要三思的八个问题
  2. 去找工作还要先交押金我认为不太靠谱
  3. 新房装修,家里WiFi怎么弄?
  4. 35岁以上还没结婚的男女们,过的如何?
  5. iPhone系统更新提醒怎么关闭?
  6. 什么是大平层?大平层比别墅好吗?
  7. 写了一篇关于餐饮业陷入困境的文章
  8. 下一个十年,互联网升级的大致方向在哪里?
  9. ubuntu下载goalng-1.9
  10. P5 周志华:“数据、算法、算力”,人工智能三要素在未来还要加上“知识”