算法笔记--卢卡斯定理
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
代码:
![](/assets/blank.gif)
![](/assets/blank.gif)
#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
算法笔记--卢卡斯定理相关推荐
- 《夜深人静写算法》数论篇 - (22) 卢卡斯定理
文章目录 前言 一.问题引入 1.递推公式 2.通项公式 二.卢卡斯定理 1.定义 2.证明 1)引理1 2)引理2 3)卢卡斯定理 前言 卢卡斯定理,ACM刷题中遇到过,用于组合数取模. 一 ...
- 算法笔记——数学相关
算法笔记--数学相关 高精度 乘法逆元 排列组合 二项式定理 质数的判定和应用 约数 拓展欧几里得 大步小步算法(BSGS) 拓展大步小步算法 快速乘和快速幂 矩阵相关 欧拉函数 欧拉定理及费马小定理 ...
- 洛谷 P4720 【模板】扩展卢卡斯定理/exLucas
[模板]扩展卢卡斯定理/exLucas 题目背景 这是一道模板题. 题目描述 求 Cnmmodp{\mathrm{C}}_n^m \bmod{p}Cnmmodp 其中 C\mathrm{C}C 为组 ...
- 【数学】扩展卢卡斯定理
Description 求 ( n m ) m o d p \dbinom{n}{m}\bmod p (mn)modp 其中 p p p 较小且 不保证 p p p 是质数. Method 前置芝士 ...
- 组合数求解与(扩展)卢卡斯定理
前言: 咳咳咳咳 ,最近瘟疫盛行,围观的记得要戴口罩. 求解组合数的方法大家应该都见了很多了,这篇博客将围绕这个问题进行归纳和深入学习. 问题: 给定 n , k , p n,k,p n,k,p求解组 ...
- 算法笔记知识点整理大全
每次刷题都觉得自己吃了知识点不全,基础不牢固的亏,刷题的时候目标也不明确,于是看完了算法笔记并把知识点归纳了一下,当然直接看书会更加详细,这个归纳只是学习时加深印象以及方便自己之后回顾而已:之后刷题大 ...
- 金蝉素数c语言,算法笔记_204:第四届蓝桥杯软件类决赛真题(Java语言C组)
前言:以下代码仅供参考,若有错误欢迎指正哦~ 1好好学习 汤姆跟爷爷来中国旅游.一天,他帮助中国的小朋友贴标语.他负责贴的标语是分别写在四块红纸上的四个大字:"好.好.学.习".但 ...
- 《算法笔记》中文版 - 包括数组,链表,树,图,递归,DP,有序表等相关数据结构与算法的讲解及代码实现...
来源:专知本文为资源,建议阅读5分钟本文为你分享<算法笔记>中文版. https://github.com/Dairongpeng/algorithm-note 目录概览 第一节 复杂度. ...
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
- 洛谷——P3807 【模板】卢卡斯定理
P3807 [模板]卢卡斯定理 洛谷智推模板题,qwq,还是太弱啦,组合数基础模板题还没做过... 给定n,m,p($1\le n,m,p\le 10^5$) 求 $C_{n+m}^{m}\ mod\ ...
最新文章
- 数据结构笔记--二叉查找树概述以及java代码实现
- VM虚拟机ping不通局域网其他主机的解决办法
- *【ZOJ - 3604】Tunnel Network (Cayley定理,purfer数列,无根树定理,构造,结论,或dp)
- 云漫圈 | 敢怼我们程序员?哼,有你好看的。。。
- python使用布隆过滤器筛选数据
- SAP License:BWBCS学习记录
- 冯诺依曼体系结构_极简体系结构之一:冯诺依曼体系结构
- 记录一次通过抓包解决Zabbix no active checks on server
- 最近新建了一个米表站
- C#会对于未赋值的变量/成员变量,给予一个初始值吗?
- 用python将word文档导入数据库_python读取word文档,插入mysql数据库实例
- Chrome 76.0.3809.100(正式版本) (64 位) 版本 77.0.3865.90不显示网址中的www怎么解决...
- spring boot 核心配置文件是什么?
- 【Alpha版本】项目测试
- WPS 手动去除广告
- 干货!基于元消歧的偏多标记学习
- 日本计划建造世界上速度最快的超级计算机
- Java服务器与客户端传文件,java实现上传文件到服务器和客户端.pdf
- 练习:罗马数字转整数
- JavaScript定时器与清除定时器