大致意思就是求组合数C(n , m) % p的值, p为一个偶数

可以将组合数的n 和 m都理解为 p 进制的表示

n  = ak*p^k + a(k-1)*p^(k-1) + ... + a1*p + a0

m = bk*p^k + b(k-1)*p^(k-1) + ... + b1*p + b0

然后C(n,m)%p = C(ak , bk) * C(a(k-1) , b(k-1)) * ... * C(a1 , b1) * C(a0 , b0) % p

当然这其中出现 ai < bi的情况那直接视为乘以了 0

其他情况都是正常的组合数计算

因为p为素数,取模的过程求逆元就是利用欧拉定理来求解

a^(-1) = a^(p-2) (mod p)

那么只要快速幂求a^(p-2) % p的值就行了 , 那么组合数C(ai , bi) 就可以算出来了

HDU 4349 求C(n , i)中 0<=i<=n 中多少个可以使C(n , i)为奇数

这里先将n转化为二进制表示,因为C(n,m)%p = C(ak , bk) * C(a(k-1) , b(k-1)) * ... * C(a1 , b1) * C(a0 , b0) % p

那么只会出现ai = 0 , 1 bi = 0 , 1的情况

那么只有ai=0 , bi = 1 才是C(ai , bi) = 0为偶数,其他时候都是奇数,那只要枚举每一位保证那一位出现的数字可能不超过n对应的二进制位即可

 #include <bits/stdc++.h>
using namespace std; int main() {
int n;
while(~scanf("%d" , &n)){
int ret = ;
while(n){
ret = ret*((n&)+);
n>>=;
}
printf("%d\n",ret);
}
return ;
}

HDU 3037 一道比较裸的lucas定理的题目

求C(n+m , n)%p的值

 #include <bits/stdc++.h>
using namespace std;
#define ll long long int q_pow(int a , int b , int p)
{
ll ret = ;
while(b){
if(b&) ret = ret*a%p;
a = (ll)a*a%p;
b>>=;
}
return ret;
} int C(int a , int b , int p)
{
if(b==) return ;
if(a<b) return ;
if(a==b) return ;
int s= , t=;
for(int i= ; i<=b ; i++) s=(ll)s*(a-i+)%p;
for(int i= ; i<=b ; i++) t=(ll)t*i%p;
//cout<<"C: "<<a<<" "<<b<<" "<<p<<" "<<s<<" "<<t<<endl;
return (ll)s*q_pow(t , p- , p)%p;
} int lucas(int a, int b,int p)
{
//cout<<"in: "<<a<<" "<<b<<" "<<p<<endl;
if(b==) return ;
if(a<b) return ;
if(a==b) return ;
//cout<<"en: "<<C(a%p , b%p , p)<<endl;
return (ll)C(a%p , b%p , p)*lucas(a/p , b/p , p)%p;
} int main() {
//freopen("in.txt" , "r" , stdin);
int n;
scanf("%d" , &n);
while(n--){
int a , b , p;
scanf("%d%d%d", &a , &b , &p);
printf("%d\n" , lucas(a+b,a,p));
}
return ;
}

lucas 定理学习的更多相关文章

  1. Lucas定理学习小记

    (1)Lucas定理:p为素数,则有: (2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 =  [n/p]*p+a0,m=[m/p]*p+b0其次,我们 ...

  2. Lucas定理学习(进阶中)

    (1)Lucas定理:p为素数,则有: (2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 =  [n/p]*p+a0,m=[m/p]*p+b0其次,我们 ...

  3. Lucas定理学习笔记

    从这里开始 一个有趣的问题 扩展Lucas算法 一个有趣的问题 题目大意 给定$n, m, p$,求$C_{n}^{m}$除以$p$后的余数. Subtask#1  $0\leqslant m\leq ...

  4. lucas定理学习

    Lucas定理是用来求 c(n,m) mod p,p为素数的值. 表达式: C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 当我们遇到求一个N,M很大的组合数的时候,递推法就显得很耗 ...

  5. Lucas定理学习笔记(没有ex_lucas)

    题目链接\(Click\) \(Here\) \(ex\_lucas\)实在是不能学的东西...简单学了一下\(Lucas\)然后打算就这样鸽着了\(QwQ\)(奶一口不可能考) 没什么复杂的,证明的 ...

  6. [Lucas定理]【学习笔记】

    Lucas定理 [原文]2017-02-14 [update]2017-03-28 Lucas定理 计算组合数取模,适用于n很大p较小的时候,可以将计算简化到小于p $ \binom{n}{m} \m ...

  7. [学习笔记]扩展LUCAS定理

    可以先做这个题[SDOI2010]古代猪文 此算法和LUCAS定理没有半毛钱关系. [模板]扩展卢卡斯 不保证P是质数. $C_n^m=\frac{n!}{m!(n-m)!}$ 麻烦的是分母. 如果互 ...

  8. 【转】Lucas定理 & 逆元学习小结

    (From:离殇灬孤狼) 这个Lucas定理是解决组合数的时候用的,当然是比较大的组合数了.比如C(1000000,50000)% mod,这个mod肯定是要取的,要不算出来真的是天文数字了. 对于一 ...

  9. lucas定理 +证明 学习笔记

    lucas定理 p为素数 \[\dbinom n m\equiv\dbinom {n\%p} {m\%p} \dbinom {n/p}{m/p}(mod p)\] 左边一项直接求,右边可递归处理,不包 ...

随机推荐

  1. zabbix监控系统客户端安装

    原文:http://blog.chinaunix.net/uid-25266990-id-3387002.html 测试使用agentd监听获取数据. 服务端的安装可以查看http://blog.ch ...

  2. PHP的UTF-8中文转拼音处理类(性能已优化至极致)

    <?php /** * PHP 汉字转拼音 * @author Jerryli(hzjerry@gmail.com) * @version V0.20140715 * @package SPFW ...

  3. activiti jbpm相关资源

    Activiti 5.16 用户手册 http://www.mossle.com/docs/activiti/index.html jBPM 4.4开发指南 http://www.mossle.com ...

  4. SDL1.2到2.0的迁移指南(转)

    里面有些单词不好翻译所以放在开头,以备查验. BLock Image Transfer, a computer graphics operation in which two bitmap patte ...

  5. Mvc4_@RenderBody()和@RenderSection()

    @RenderBody():呈现子页的主体内容 @RenderSection():呈现特别的节部分. HelperResult RenderSection(string name, bool requ ...

  6. Redhat Linux 性能 - 内置的 sar

    缺省 / 默认 Redhat Linux 会自动使用 sar 采集系统性能信息,并记录到 /var/log/sa 每 10分钟采集一次, 记录 CPU / Memory / Disk / Networ ...

  7. 2016-6-15-de novo文献阅读

    准备读四篇denovo的文献: Nature Biotechnology(2015) - Sequencing of allotetraploid cotton (Gossypium hirsutum ...

  8. linux笔记:linux系统安装-系统分区

    分区类型: 1.主分区:最多只能有4个. 2.扩展分区:最多只能有1个:主分区+扩展分区最多有4个:不能写入数据,只能包含逻辑分区. 3.逻辑分区. 格式化: 向磁盘中写入文件系统.会附带地清空磁盘中 ...

  9. C# 给软件加注册码功能

    为自己写的程序加一个注册功能吧.生成的机器号是根据CPU和硬盘号来的,根据自己的需求改成是否是随机生成. 代码直接粘贴到新建类覆盖原代码就能直接用了. using System; using Syst ...

  10. Log 日志级别

        一直对于程序中的日志级别有点模糊,今天专门百度学习下.遂成此文:     日志记录器(Logger)是日志处理的核心组件.log4j具有5种正常级别(Level).:  1.static Le ...