Lucas & exLucas
:
这里
证明(jijidawang闲话)
对于
总:
- 对
进行质因数分解,令:将原式变为求 ,满足: - 求解每个
对应的 的值。 合并即可(显然 两两互质)。
1. 质因数分解:
挺简单,略。
2. 求 (重难点)
首先将
因为分母与模数不一定互质,于是考虑提取因数:
然后就可以乘法逆元(
接下来有两个问题:求
先求
将
左边为可以整除
在化简一下:
第一段
看第三段,发现它在
然后暴力+快速幂算即可。
然后考虑求
我们发现,
边界:
合并:
CODE(点击查看)
//分清pi、pk。 #include<bits/stdc++.h> using namespace std; #define llt long long llt MOD,n,m; template<typename T> inline void read(T &x){ char s=getchar();x=0;bool pd=false; while(s<'0'||'9'<s){if(s=='-') pd=true;s=getchar();} while('0'<=s&&s<='9')x=(x<<1)+(x<<3)+(s^48),s=getchar(); if(pd) x=-x; } inline llt fpw(llt a,llt b,llt Mod){ llt pan=1; while(b){ if(b&1) pan=pan*a%Mod; a=a*a%Mod,b>>=1; } return pan; } inline void exgcd(llt a,llt b,llt &x,llt &y){ if(!b) x=1,y=0; else exgcd(b,a%b,y,x),y-=a/b*x; } inline llt inv(llt a,llt Mod){ llt x,y;exgcd(a,Mod,x,y); return (x%Mod+Mod)%Mod; } inline llt fac(llt a,llt pi,llt pk){ if(!a) return 1; llt cnt=1; for(int i=2;i<=pk;i++) if(i%pi) cnt=cnt*i%pk; cnt=fpw(cnt,a/pk,pk); for(int i=2;i<=a%pk;i++) if(i%pi) cnt=cnt*i%pk; return cnt*fac(a/pi,pi,pk)%pk; } llt up(llt x,llt p){return (x)?x/p+up(x/p,p):0;} inline llt get_c(llt pi,llt pk,llt x,llt y){ llt fx=fac(x,pi,pk),fy=fac(y,pi,pk),fxy=fac(x-y,pi,pk); return fx*inv(fy,pk)%pk*inv(fxy,pk)%pk*fpw(pi,up(n,pi)-up(m,pi)-up(n-m,pi),pk)%pk; } inline llt crt(llt a,llt Mod){ return a*(MOD/Mod)%MOD*inv(MOD/Mod,Mod)%MOD; } inline llt exlucas(llt x,llt y){ llt p=MOD,ans=0; for(int i=2;i*i<=p;i++){ if(p%i) continue; llt pk=1; while(p%i==0) p/=i,pk*=i; ans=(ans+crt(get_c(i,pk,x,y),pk))%MOD; } if(p>1) ans=(ans+crt(get_c(p,p,x,y),p))%MOD; return ans; } int main(){ #ifndef ONLINE_JUDGE freopen("in.in","r",stdin); freopen("out.out","w",stdout); #endif read(n),read(m),read(MOD); printf("%lld",exlucas(n,m)); }
本文来自博客园,作者:5k_sync_closer,转载请注明原文链接:https://www.cnblogs.com/xrlong/articles/17089294.html
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了