codeforces Gym - 100633J Ceizenpok’s formula
拓展Lucas
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define MAXN 100000+10
#define ll long long
#define pb push_back
#define ft first
#define sc second
#define mp make_pair
using namespace std;
void extgcd(ll a,ll b,ll &x,ll &y){
if(!b){x=,y=;}
else{
ll xx,yy;
extgcd(b,a%b,xx,yy);
x=yy;
y=xx-a/b*yy;
}
}
ll Inv(ll a,ll b){
ll x,y;
extgcd(a,b,x,y);
x=(x%b+b)%b;
if(!x)x+=b;
return x;
}
ll Pow(ll a,ll b,ll p){
ll ret=1LL;
while(b){
if(b&){(ret*=a)%=p;}
(a*=a)%=p;
b>>=;
}
return ret;
}
ll fac(ll n,ll pi,ll pk){
if(!n)return 1LL;
ll ret=1LL;
for(ll i=;i<pk;i++){
if(i%pi)(ret*=i)%=pk;
}
ret=Pow(ret,n/pk,pk);
for(ll i=;i<=(n%pk);i++){
if(i%pi)(ret*=i)%=pk;
}
return ret*fac(n/pi,pi,pk)%pk;
//每隔pi拿走一个,所以是n/pi,不是n/pk
}
ll C(ll n,ll m,ll pi,ll pk){
ll a=fac(n,pi,pk),b=fac(m,pi,pk),c=fac(n-m,pi,pk);
ll t=0LL;
for(ll i=n/pi;i;i/=pi)t+=i;
for(ll i=m/pi;i;i/=pi)t-=i;
for(ll i=(n-m)/pi;i;i/=pi)t-=i;
ll ret=a*Inv(b,pk)*Inv(c,pk)%pk;
(ret*=Pow(pi,t,pk))%=pk;
return ret;
}
ll n,m,p;
int main()
{
ll ans=0LL;
scanf("%lld%lld%lld",&n,&m,&p);
for(ll x=p,i=;i<=p;i++){
if(x%i==){
ll pk=;
while(x%i==){
pk*=i;
x/=i;
}
ll t=C(n,m,i,pk);
(t*=(p/pk))%=p;
(t*=Inv(p/pk,pk))%=p;
(ans+=t)%=p;
}
}
printf("%lld\n",ans);
return ;
}
codeforces Gym - 100633J Ceizenpok’s formula的更多相关文章
- [Codeforces 100633J]Ceizenpok’s formula
Description 题库链接 求 \[C_n^m \mod p\] \(1\leq m\leq n\leq 10^{18},2\leq p\leq 1000000\) Solution 一般的 \ ...
- Codeforces.100633J.Ceizenpok's formula(扩展Lucas)
题目链接 ->扩展Lucas //求C_n^k%m #include <cstdio> typedef long long LL; LL FP(LL x,LL k,LL p) { L ...
- 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)
J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces Gym 101623A - 动态规划
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...
- 【Codeforces Gym 100725K】Key Insertion
Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...
- Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】
2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...
- codeforces gym 100553I
codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...
随机推荐
- sublime安装 和 插件安装
先从官网下载sublime https://www.sublimetext.com/3 安装完毕后 快捷键ctrl+` 或者View->Show Console,输入如下代码(sublime ...
- apache的重写规则
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC]RewriteRule .* http://i8. ...
- linux下安装redis和phpredis扩展
一.安装redis 1.下载redis-3.2.3.tar.gz wget http://download.redis.io/releases/redis-3.2.3.tar.gz 2.解压redis ...
- 新特性GTID
什么是GTID 每提交一个事务,当前的执行过程都会拿到一个唯一的标识符,此标识符不仅对其源mysql 实列是唯一的而在给定的复制环境中的所有mysql 实列也是唯一的,所哟的事务与其GTID 之间都是 ...
- istio入门(04)istio的helloworld-部署构建
参考链接: https://zhuanlan.zhihu.com/p/27512075 安装Istio目前仅支持Kubernetes,在部署Istio之前需要先部署好Kubernetes集群并配置好k ...
- 从感知机到 SVM,再到深度学习(一)
在上篇博客中提到,如果想要拟合一些空间中的点,可以用最小二乘法,最小二乘法其实是以样例点和理论值之间的误差最小作为目标.那么换个场景,如果有两类不同的点,而我们不想要拟合这些点,而是想找到一条 ...
- express学习(三)—— cookie和session
express学习(三)-- cookie和session cookie存在浏览器中,最大只能保存4K数据,不安全 session存在服务器中,不能独立(先读取cookie再读取session),较安 ...
- Django REST framework+Vue 打造生鲜超市(四)
五.商品列表页 5.1.django的view实现商品列表页 (1)goods/view_base.py 在goods文件夹下面新建view_base.py,为了区分django和django res ...
- 测试驱动开发实践4————testSave之新增文档分类
[内容指引] 1.确定"新增文档分类"的流程及所需的参数 2.根据业务规则设计测试用例 3.为测试用例赋值并驱动开发 一.确定"新增文档分类"的流程及所需的参数 ...
- python Josnp(跨域)
python Josnp(跨域) 所谓的跨域就是进行不用域名内的请求,好比如说我在A域名想访问B域名的内容就是一种跨域的行为. 但是在我们浏览器端会有一个同源策略的设置,这个同源策略只对Ajax请求有 ...