luogu3807 【模板】 卢卡斯定理

题目大意

对于一个很大的$n,m,p$如何求$C_{n+m}^m\mod p$?

Lucas定理

若$n_i,m_i$分别是$n,m$在$p$进制下第$i$位的数字,则有

$$C_n^m\mod p=\prod_{i=0}^{\log_p m}C_{n_i}^{m_i}\mod p$$

求法

按照定理式一个一个求组合数即可。

组合数并不用批量求。故预处理出各项阶乘值,然后运用

$$C_n^m=\frac{n!}{m!(n-m)!}$$

,因为取模P,运用乘法逆元、快速乘工具求解即可。

注意事项

  • MAX_N应当为n,m的范围*2,因为n+m。
  • 求组合数时,若m>n,返回0。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;#define ll long long
#define inv(a) Inv(a, P)
#define mult(a, b) Mult(a, b, P)const int MAX_N = 200010;
ll Fact[MAX_N];
ll P;void GetFact(int n, ll* Fact, ll p)
{Fact[0] = 1;for (int i = 1; i <= n; i++)Fact[i] = Fact[i - 1] % p * i % p;
}ll Exgcd(ll a, ll b, ll& x, ll& y)
{if (b == 0){x = 1;y = 0;return a;}ll d = Exgcd(b, a%b, x, y);ll tx = x;x = y;y = tx - a / b * y;return d;
}ll Inv(ll a, ll p)
{ll x, y;Exgcd(a, p, x, y);return (x % p + p) % p;
}ll Mult(ll a, ll b, ll p)
{ll ans = 0;while (b){if (1 & b)ans = (ans + a) % p;a = (a + a) % p;b >>= 1;}return ans;
}ll Comb(ll n, ll m)
{if (m > n)return 0;return mult(Fact[n], inv(mult(Fact[m], Fact[n - m])));
}ll Lucas(ll n, ll m, ll p)
{if (m == 0)return 1;return Comb(n % p, m % p) * Lucas(n / p, m / p, p) % p;
}int main()
{int caseCnt;scanf("%d", &caseCnt);while (caseCnt--){ll n, m;scanf("%lld%lld%lld", &n, &m, &P);GetFact(n + m, Fact, P);printf("%lld\n", Lucas(n + m, m, P));}return 0;
}

  

转载于:https://www.cnblogs.com/headboy2002/p/9126156.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防止System.exit调用

在开发运行其他开发人员编写的代码的容器时&#xff0c;请谨慎防范System.exit调用。 如果开发人员无意间调用了System.exit并将其代码部署为由您的容器运行&#xff0c;则它将完全降低容器进程。 可以使用SecurityManager中的checkExit函数调用来控制。 根据SecurityManager …

php异步请求$.post,如何用PHP实现异步请求、忽略返回值

本篇文章的主要内容是用PHP实现异步请求、忽略返回值&#xff0c;具有一定的参考价值&#xff0c;有需要的朋友可以看看&#xff0c;希望能对你有帮助。项目需要&#xff0c;场景如下&#xff1a;某个条件下需要调用接口发送多个请求执行脚本&#xff0c;但是由于每个请求下的脚…

JavaScript函数式编程学习

本文是我在函数式编程学习过程中&#xff0c;总结的笔记&#xff0c;也分享给想学函数式编程的同学。 函数式编程可能对于初学者来说&#xff0c;概念难以理解&#xff0c;入门比较难。所以本文从两部分去学习。 在你身边你左右 --函数式编程别烦恼 第一部分&#xff0c;你身…

读书印记 - 《沟通的艺术:一本手把手教你社交沟通的书》

一个教训是没上过榜也没什么好推荐的书有挺大概率不是本好书。我现在不太能耐心的去读这种指导手册&#xff0c;一是谈话的技巧需要在实战中才能有效提升&#xff0c;二是这方面对我来说不是关注的重点。所以几乎是刷刷的翻完了整本书。当然也不能说这本书就是烂书&#xff0c;…

Linux NTP

ntpd服务的设置: ntpd服务的相关设置文件如下&#xff1a; /etc/ntp.conf&#xff1a;这个是NTP daemon的主要设文件&#xff0c;也是 NTP 唯一的设定文件。/usr /share/zoneinfo/:在这个目录下的文件其实是规定了各主要时区的时间设定文件&#xff0c;例如北京地区的时区设定文…

Java Web项目的保存和刷新

如何配置计算机以保存并刷新Java Web项目&#xff1f; 当您向开发人员提出此问题时&#xff0c;答案以“哦&#xff0c;好吧……”开头&#xff0c;并以某种可行的方式继续描述。 每个人都有自己的方式。 首先–为什么需要这个&#xff1f; 因为执行复制和重新启动服务器是生产…

mysql alter怎么用,mysql alter话语用法

mysql alter语句用法//主键ALTER TABLE tablename add new_field_id int(5) UNSIGNED DEFAULT 0 NOT NULL anto_increment,ADD PRIMARY KEY (new_field_id);//增加一个新列mysql>ALTER TABLE tablename ADD fieldname fieldtype如&#xff1a;ALTER TABLE t2 ADD d TIMESTAM…

《React 学习之道》The Road to learn React (简体中文版)

通往 React 实战大师之旅&#xff1a;掌握 React 最简单&#xff0c;且最实用的教程。 前言 《React 学习之道》这本书使用路线图中的精华部分用于传授 React&#xff0c;并将其融入一个独具吸引力的真实世界 App的具体代码实现。 如何掌握 React 存在特别多的路线图。本书提…

Linux下设置和查看环境变量

Linux的变量种类 按变量的生存周期来划分&#xff0c;Linux变量可分为两类&#xff1a; 1 永久的&#xff1a;需要修改配置文件&#xff0c;变量永久生效。 2 临时的&#xff1a;使用export命令声明即可&#xff0c;变量在关闭shell时失效。 设置变量的三种方法 1 在/etc/profi…

vue.js(三)

这里该记到vue的组件了&#xff0c;组件基础篇 1.vue组件的基本书写方式 Vue.component(button-counter, {data: function () {return {count: 0}},template: <button v-on:click"count">You clicked me {{ count }} times.</button> }) 上面定义了一个名…

RIP GlassFish –感谢所有的鱼。

我们都听说过它的到来。 昨天&#xff0c;JavaEE和GlassFish的官方路线图更新已发布 。 从标题开始&#xff0c;整个帖子基本上都是关于一件事的&#xff1a;今天我们知道的GlassFish Server已从完整的产品转为玩具产品。 从Sun到Oracle的漫长道路 从一开始&#xff0c;GlassF…

Nuxt中如何使用Vuex-Store异步获取数据

Nuxt是一个基于Vue.js的通用型框架&#xff0c;它集成了使用Vue开发的绝大数组件/框架。 长话短说如何在Vuex-store中获取异步数据呢&#xff1f; 在Nuxt中由于集合了Vuex还有其他的一些配置&#xff0c;大大的方便了我们使用Vuex&#xff1b;在Nuxt官方文档中写到&#xff1a;…

Struts2面试问答

Struts2是用Java开发Web应用程序的著名框架之一。 最近&#xff0c;我写了很多Struts2教程 &#xff0c;在这篇文章中&#xff0c;我列出了一些重要的Struts2面试问题以及答案&#xff0c;以帮助您进行面试。 什么是Struts2&#xff1f; Struts1和Struts2之间有什么区别&…

php怎么改标题,PHP – 如何更改包含header.php的页面标题?

扩展Dainis Abols答案,以及关于输出处理的问题,考虑以下&#xff1a;你的header.php标题标签设置为< title>&#xff05;TITLE&#xff05;< / title&gt ;;“&#xff05;”很重要,因为几乎没有人输入&#xff05;TITLE&#xff05;所以你可以在以后使用str_repla…

基于canvas的骨骼动画

最近学习到了一种关于canvas的骨骼动画&#xff0c;听这个名字就知道他和canvas之前的动画不同&#xff0c;不知道你有没有兴趣了解一下呢&#xff1f;关于骨骼动画最初是无意间在腾讯团队上看到的&#xff0c;但是由于他官网的教程是在是少之又少&#xff0c;也就仅有一个小de…

Python APSchedule安装使用与源码分析

我们的项目中用apschedule作为核心定时调度模块。所以对apschedule进行了一些调查和源码级的分析。 1、为什么选择apschedule&#xff1f; 听信了一句话&#xff0c;apschedule之于python就像是quartz之于java。实际用起来还是不错的。 2、安装 # pip安装方式 $ pip install ap…

短信验证登录实现流程

以手机号码为参数调用后台接口发送登录验证码&#xff0c;注意同一号码发送短信的时间间隔和每日次数阈值后台接口按规则要求生成验证码将手机号码(Key)和验证码(Value)存入服务器缓存&#xff0c;同时设置缓存有效时间将验证码填充短信模板作为短信内容&#xff0c;调用第三方…

NetBeans 7.4的本机Java打包

成为“ NetBeans 74 NewAndNoteworthy ”页面的NetBeans 7.4的新功能之一是“本机打包 ”&#xff0c;在该页面上被描述为“ JavaSE项目现在支持使用JavaFX提供的本机打包技术来创建本机包。 ” 我将使用一个非常简单的示例来演示NetBeans 7.4中的本机打包功能。 下一个代码清…

基于Vue开发一个日历组件

最近在做一个类似课程表的需求&#xff0c;需要自制一个日历来支持功能及展现&#xff0c;就顺便研究一下应该怎么开发日历组件。 更新 2.23修复了2026年2月份会渲染多一行的bug&#xff0c;谢谢深蓝一人童鞋提出的bug&#xff0c;解决方案是给二月份的日历做特殊处理&#xf…

php 打开word乱码怎么办,如何解决php word 乱码问题

php word乱码的解决办法&#xff1a;首先打开“/Writer/Word2007/Base.php”文件&#xff1b;然后添加“$objWriter->writeAttribute(‘w:eastAsia’, $font)”内容&#xff1b;最后保存修改即可。PHPword解决中文乱码一、增加东亚字体支持打开并编辑路径/Writer/Word2007/B…