Lucas定理是用来(当n和m和p很大时)求 C(n,m) mod p,p为素数的值。

表达式:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p。(可以递归)

递归方程:(C(n%p, m%p)*Lucas(n/p, m/p))%p。(递归出口为m==0,return 1)

模板:

const int N=1e5+7;
int p;
ll fac[N];
void init()
{fac[0]=1;for(int i=1;i<=p;i++)fac[i]=fac[i-1]*i%p;
}
ll q_pow(ll n,ll k)
{ll ans=1;while(k){if(k&1)ans=ans*n%p;n=n*n%p;k>>=1;}return ans;
}
ll C(ll n,ll m)
{if(m>n)return 0;return fac[n]*q_pow(fac[m]*fac[n-m]%p,p-2)%p;
}
ll lucas(ll n,ll m)
{if(m==0)return 1;return (C(n%p,m%p)*lucas(n/p,m/p))%p;
}

例题1:451E - Devu and Flowers

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define pi acos(-1.0)
#define mem(a,b) memset(a,b,sizeof(a))const int N=1e5+7;
int p;
ll fac[N];
ll f[25];
void init()
{fac[0]=1;for(int i=1;i<=p;i++)fac[i]=fac[i-1]*i%p;
}
ll q_pow(ll n,ll k)
{ll ans=1;while(k){if(k&1)ans=ans*n%p;n=n*n%p;k>>=1;}return ans;
}
ll C(ll n,ll m)
{if(n<m)return 0;if(n-m<m)m=n-m;ll s1=1,s2=1;for(int i=0;i<m;i++) {s1=s1*(n-i)%p;s2=s2*(i+1)%p;}return s1*q_pow(s2,p-2)%p;
}
ll lucas(ll n,ll m)
{if(m==0)return 1;return (C(n%p,m%p)*lucas(n/p,m/p))%p;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);p=1e9+7;ll n,s;cin>>n>>s;for(int i=0;i<n;i++)cin>>f[i];ll ans=0;for(int i=0;i<(1<<n);i++){ll sum=s,sign=1;for(int j=0;j<n;j++){if(i&(1<<j)){sum-=f[j]+1;sign=-sign;}}if(sum<0)continue;ans+=sign*lucas(sum+n-1,n-1);ans%=p;}cout<<(ans+p)%p<<endl;return 0;
}

View Code

转载于:https://www.cnblogs.com/widsom/p/7692965.html

算法笔记--卢卡斯定理相关推荐

  1. 《夜深人静写算法》数论篇 - (22) 卢卡斯定理

    文章目录 前言 一.问题引入 1.递推公式 2.通项公式 二.卢卡斯定理 1.定义 2.证明 1)引理1 2)引理2 3)卢卡斯定理 前言     卢卡斯定理,ACM刷题中遇到过,用于组合数取模. 一 ...

  2. 算法笔记——数学相关

    算法笔记--数学相关 高精度 乘法逆元 排列组合 二项式定理 质数的判定和应用 约数 拓展欧几里得 大步小步算法(BSGS) 拓展大步小步算法 快速乘和快速幂 矩阵相关 欧拉函数 欧拉定理及费马小定理 ...

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

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

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

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

  5. 组合数求解与(扩展)卢卡斯定理

    前言: 咳咳咳咳 ,最近瘟疫盛行,围观的记得要戴口罩. 求解组合数的方法大家应该都见了很多了,这篇博客将围绕这个问题进行归纳和深入学习. 问题: 给定 n , k , p n,k,p n,k,p求解组 ...

  6. 算法笔记知识点整理大全

    每次刷题都觉得自己吃了知识点不全,基础不牢固的亏,刷题的时候目标也不明确,于是看完了算法笔记并把知识点归纳了一下,当然直接看书会更加详细,这个归纳只是学习时加深印象以及方便自己之后回顾而已:之后刷题大 ...

  7. 金蝉素数c语言,算法笔记_204:第四届蓝桥杯软件类决赛真题(Java语言C组)

    前言:以下代码仅供参考,若有错误欢迎指正哦~ 1好好学习 汤姆跟爷爷来中国旅游.一天,他帮助中国的小朋友贴标语.他负责贴的标语是分别写在四块红纸上的四个大字:"好.好.学.习".但 ...

  8. 《算法笔记》中文版 - 包括数组,链表,树,图,递归,DP,有序表等相关数据结构与算法的讲解及代码实现...

    来源:专知本文为资源,建议阅读5分钟本文为你分享<算法笔记>中文版. https://github.com/Dairongpeng/algorithm-note 目录概览 第一节 复杂度. ...

  9. 数据结构与算法笔记 - 绪论

    数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...

  10. 洛谷——P3807 【模板】卢卡斯定理

    P3807 [模板]卢卡斯定理 洛谷智推模板题,qwq,还是太弱啦,组合数基础模板题还没做过... 给定n,m,p($1\le n,m,p\le 10^5$) 求 $C_{n+m}^{m}\ mod\ ...

最新文章

  1. 数据结构笔记--二叉查找树概述以及java代码实现
  2. VM虚拟机ping不通局域网其他主机的解决办法
  3. *【ZOJ - 3604】Tunnel Network (Cayley定理,purfer数列,无根树定理,构造,结论,或dp)
  4. 云漫圈 | 敢怼我们程序员?哼,有你好看的。。。
  5. python使用布隆过滤器筛选数据
  6. SAP License:BWBCS学习记录
  7. 冯诺依曼体系结构_极简体系结构之一:冯诺依曼体系结构
  8. 记录一次通过抓包解决Zabbix no active checks on server
  9. 最近新建了一个米表站
  10. C#会对于未赋值的变量/成员变量,给予一个初始值吗?
  11. 用python将word文档导入数据库_python读取word文档,插入mysql数据库实例
  12. Chrome 76.0.3809.100(正式版本) (64 位) 版本 77.0.3865.90不显示网址中的www怎么解决...
  13. spring boot 核心配置文件是什么?
  14. 【Alpha版本】项目测试
  15. WPS 手动去除广告
  16. 干货!基于元消歧的偏多标记学习
  17. 日本计划建造世界上速度最快的超级计算机
  18. Java服务器与客户端传文件,java实现上传文件到服务器和客户端.pdf
  19. 练习:罗马数字转整数
  20. JavaScript定时器与清除定时器

热门文章

  1. 实现子元素在父元素中水平垂直都居中笔记
  2. 5.abp框架code first方式删除表
  3. phpcms加载系统类与加载应用类的区别
  4. GoLand添加一个已有项目的相关配置
  5. grafna监控Java接口_性能测试之 JVM 的监控 Grafana
  6. cups 2.4.1编译办法
  7. github库fork后,将更新提交到源库
  8. MAC正确简单安装brew
  9. 抗击疫情,宜复辟拱手礼
  10. 南昌项目中镜像系统时遇到的问题