洛谷 P4720 【模板】扩展 / 卢卡斯 模板题
扩展卢卡斯定理 : https://www.luogu.org/problemnew/show/P4720
卢卡斯定理:https://www.luogu.org/problemnew/show/P3807
卢卡斯模板
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N =1e5;
ll n, m, p, fac[N];
void init()
{
int i;
fac[] =;
for(i =; i <= p; i++)
fac[i] = fac[i-]*i % p;
}
ll q_pow(ll a, ll b)
{
ll ans =;
while(b)
{
if(b &) ans = ans * a % p;
b>>=;
a = a*a % p;
}
return ans;
} ll C(ll n, ll m)
{
if(m > n) return ;
return fac[n]*q_pow(fac[m]*fac[n-m], p-) % p;
} ll Lucas(ll n, ll m )
{
if(m ==) return ;
else return (C(n%p, m%p)*Lucas(n/p, m/p))%p;
} int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%lld%lld%lld", &n, &m, &p);
init();
printf("%lld\n", Lucas(n+m, m));
}
return ;
}
扩展卢卡斯模板
#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long ll; ll read()
{
ll f=,x=;
char ss=getchar();
while(ss<''||ss>''){if(ss=='-')f=-;ss=getchar();}
while(ss>=''&&ss<=''){x=x*+ss-'';ss=getchar();}
return f*x;
} const int maxn=;
ll a[maxn],b[maxn],cnt; ll qpow(ll ai,ll k,ll mod)
{
ll mul=;
while(k>)
{
if(k&)mul=(mul*ai)%mod;
ai=(ai*ai)%mod;
k>>=;
}
return mul;
} ll fac(ll n,ll pi,ll pk)
{
if(!n) return ;
ll mul=; for(ll i=;i<=pk;++i)//分解阶乘第二部分,循环节
if(i%pi)mul=(mul*i)%pk;
mul=qpow(mul,n/pk,pk); for(ll i=;i<=n%pk;++i)//分解阶乘第三部分,求剩余数字
if(i%pi)mul=(mul*i)%pk; return mul*fac(n/pi,pi,pk)%pk;//分解阶乘第一部分的另一个阶乘递归
}
void exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==)
{
x=;y=;return;
}
exgcd(b,a%b,x,y);
ll tp=x;
x=y; y=tp-a/b*y;
}
ll inv(ll a,ll b)
{
ll x,y;
exgcd(a,b,x,y);
return (x%b+b)%b;
}
ll C(ll n,ll m,ll pi,ll pk)
{
ll facn=fac(n,pi,pk);//分别求n,m,n-m膜pi^ki的阶乘
ll facm=fac(m,pi,pk);
ll facnm=fac(n-m,pi,pk);
ll kk=;
for(ll i=n;i;i/=pi)kk+=i/pi;//上述分解阶乘第一部分的pi幂次方
for(ll i=m;i;i/=pi)kk-=i/pi;
for(ll i=n-m;i;i/=pi)kk-=i/pi; return facn*inv(facm,pk)%pk*inv(facnm,pk)%pk*qpow(pi,kk,pk)%pk;//注意求逆元
}
void div(ll n,ll m,ll x)
{
for(ll i=;i<=sqrt(x);++i)
{
if(x%i==)
{
ll pi=i,ki=;
while(x%i==)x/=i,ki++;
b[++cnt]=qpow(pi,ki,1e7);
a[cnt]=C(n,m,pi,b[cnt]);//C(n,m)%pi^ki
}
}
if(x>)
b[++cnt]=x,a[cnt]=C(n,m,x,b[cnt]);
} ll exlucas()//china
{
ll ans=,M=,x,y;
for(int i=;i<=cnt;++i) M*=b[i];
for(int i=;i<=cnt;++i)
{
ll tp=M/b[i];
exgcd(tp,b[i],x,y);
x=(x%b[i]+b[i])%b[i];
ans=(ans+tp*x*a[i])%M;
}
return (ans+M)%M;
}
int main()
{
ll n=read(),m=read(),p=read();
div(n,m,p);
printf("%lld",exlucas());
return ;
}
洛谷 P4720 【模板】扩展 / 卢卡斯 模板题的更多相关文章
- 洛谷P4720 【模板】扩展卢卡斯
P4720 [模板]扩展卢卡斯 题目背景 这是一道模板题. 题目描述 求 C(n,m)%P 其中 C 为组合数. 输入输出格式 输入格式: 一行三个整数 n,m,p ,含义由题所述. 输出格式: 一行 ...
- [洛谷P4720] [模板] 扩展卢卡斯
题目传送门 求组合数的时候,如果模数p是质数,可以用卢卡斯定理解决. 但是卢卡斯定理仅仅适用于p是质数的情况. 当p不是质数的时候,我们就需要用扩展卢卡斯求解. 实际上,扩展卢卡斯=快速幂+快速乘+e ...
- [洛谷P3391] 文艺平衡树 (Splay模板)
初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...
- 洛谷 P3380 bzoj3196 Tyvj1730 【模板】二逼平衡树(树套树)
[模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在 ...
- 洛谷4525 & 4526:【模板】自适应辛普森法——题解
参考:https://phqghume.github.io/2018/05/19/%E8%87%AA%E9%80%82%E5%BA%94%E8%BE%9B%E6%99%AE%E6%A3%AE%E6%B ...
- 洛谷 P3367 并查集模板
#include<cstdio> using namespace std; int n,m,p; ]; int find(int x) { if(father[x]!=x) father[ ...
- kmp模板 && 扩展kmp模板
kmp模板: #include <bits/stdc++.h> #define PB push_back #define MP make_pair using namespace std; ...
- 【洛谷P3709】大爷的字符串题
看这题网上居然还没人写blog,怕是都去看洛谷自带的了-- 你才是字符串!你全家都是字符串!这题跟字符串没多大关系,只是出题人lxl想要吐槽某中学而已--... 其实这题说白了就是问区间里出现最多的数 ...
- 洛谷P1072 [NOIP2009] Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
随机推荐
- SQL Server 查询锁表和接锁表
SQL Server 查询锁表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) as tableNa ...
- linux下查看nginx配置文件地址
which nginx/usr/sbin/nginx -t
- sqlserver2012 offset
/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public Lic ...
- js里面Object的一些方法
1.Object.freeze() 阻止修改现有属性的特性和值,并阻止添加新属性两种用法:Object.freeze( { } ) 和 Object.freeze( object ) <scri ...
- (转)SpringMVC学习(八)——SpringMVC中的异常处理器
http://blog.csdn.net/yerenyuan_pku/article/details/72511891 SpringMVC在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常 ...
- 2019_京东JAVA实习生招聘机试第一题
题意抽象出来就是,求根节点的所有子节点中,以这些子节点为根的子树的最大节点数. 已有向图的方式来保存无向图,所以叶子结点i的eage[i].size()==1. import java.util.Ar ...
- viewport移动端适配,读文笔记
文章地址: viewport移动端适配 笔记: 移动端适配目的: 希望在屏幕尺寸大小不同的手机上进行访问页面时,页面显示的效果能合理的展示,我们期望的是在手机屏幕较大时显示的内容比较大一些,手机屏幕小 ...
- POJ-1200-Crazy Search(字符串Hash)
Crazy Search Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33142 Accepted: 9079 Descrip ...
- poj3537 Crosses ans Crosses
题目描述 题解: 一道非常简单的$SG$函数应用. 对于一个长度求它的$SG$函数,然后判断是否为$0$即可. 代码: #include<cstdio> #include<cstri ...
- AES/DES 可逆性加密算法 -- java工具类
package com.lock.demo.service; import org.apache.tomcat.util.codec.binary.Base64; import javax.crypt ...