博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lucas 定理,组合数取模
阅读量:5102 次
发布时间:2019-06-13

本文共 996 字,大约阅读时间需要 3 分钟。

Lucas 定理求 Cmn%p 的值,如果n,m的值过大,不易直接求出,所以利用lucas定理

定理 Cmn%p =Cm/pn/pCm%pn%p

证明:

预备知识①  Cip%p=0p 为素数且,ip and i0

预备知识②   二项式定理:   这里写图片描述
特殊情况 当a=1,b=x
(1+x)n=i=0nCinxi
证明如下
n = sp + q;
m = tp + r;
1+x)n=(1+x)sp+q(1+x)sp(1+x)q(1+xp)s(1+x)q(①)
i=0sCisxpij=0qCjqxj(②)
{直接展开即可获得}

又知(1+x)n=i=0nCinxi

求等式两边 xtp+r的系数
left=Cmn
right=CtsCrq(只有当i = t,j = r的时候才有xtp+r的系数
于是问题得证
代码参考

long long qpow(long long a,long long b,long long m){ long long ans = 1; a %= m; while(b>0) {     if(b&1)     ans = ans*a%m;     a = a*a%m;     b >>= 1; }    return ans;}long long  C(long long  n,long long m,long long p){    if(m>n)        return 0;    long long tmp1 = 1,tmp2 = 1;    for(long long i = n-m+1;i <= n; ++i)       {            tmp1 = tmp1*i % p;            tmp2 = tmp2 *(n-i+1) %p;       }    return  tmp1*qpow(tmp2,p-2,p)%p;}int lucas(int n,int m,int p){    if(m==0)        return 1;    return lucas(n/p,m/p,p)*C(n%p,m%p,p)%p;}

转载于:https://www.cnblogs.com/zzuzxy/p/8542601.html

你可能感兴趣的文章
转载分享移动网站最佳实践
查看>>
spark--环境搭建--4.ZooKeeper345集群搭建
查看>>
【Leetcode_easy】1103. Distribute Candies to People
查看>>
Codeforces Round #426 (Div. 2) C. The Meaningless Game
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
leetcode - Next Permutation
查看>>
C#创建Windows服务程序
查看>>
Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
查看>>
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
推荐系统入门实践:世纪佳缘会员推荐
查看>>
[整理]苹果审核被拒后,返回崩溃日志应该怎么分析处理
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
iframe跨域与session失效问题
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
Hash和Bloom Filter
查看>>