日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷——P3807 【模板】卢卡斯定理

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷——P3807 【模板】卢卡斯定理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

P3807 【模板】盧卡斯定理

?

洛谷智推模板題,qwq,還是太弱啦,組合數基礎模板題還沒做過。。。

給定n,m,p($1\le n,m,p\le 10^5$)

求 $C_{n+m}^{m}\ mod\ p$

?

$lucas$定理:

$C_{n}^{m}=C_{n\%p}^{m\%p}\times C_{n/p}^{m/p}\mod p$

相當于把$n,m$寫成$p$進制數($A_1,A_2\dotso A_k$),($B_1,B_2\dotso B_k$)

$C_{n}^{m}=C_{A_1}^{B_1}\times C_{A_2}^{B_2}\times \dots \times C_{A_k}^{B_k}$

?

證明略。。。(還不是因為博主弱,不會證嗎。。。)?

?

Lucas+費馬小定理

#include<iostream> #include<cstdio> #include<algorithm>#define N 200004 #define LL long long using namespace std;LL f[N];LL pow(LL a,LL b,LL p){LL s=1;for(;b;b>>=1,a=a*a%p)if(b&1) s=s*a%p;return s; }LL C(LL n,LL m,LL p){if(m>n) return 0;return (f[n]*pow(f[m],p-2,p))%p*(pow(f[n-m],p-2,p)%p)%p; }LL lucas(LL n,LL m,LL p){if(!m) return 1;return C(n%p,m%p,p)*lucas(n/p,m/p,p)%p; }LL T,n,m,p;int main() {scanf("%lld",&T);while(T--){scanf("%lld%lld%lld",&n,&m,&p);f[0]=1;for(int i=1;i<=p;i++) f[i]=f[i-1]*i%p;printf("%lld\n",lucas(n+m,m,p));}return 0; }

?

lucas+逆元

#include<iostream> #include<cstdio> #include<algorithm>#define N 200004 #define LL long long using namespace std;LL f[N],inv[N];LL lucas(LL n,LL m,LL p){if(n<m) return 0;else if(n<p) return f[n]*inv[m]*inv[n-m]%p;else return lucas(n%p,m%p,p)*lucas(n/p,m/p,p)%p; }LL T,n,m,p;int main() {scanf("%lld",&T);while(T--){scanf("%lld%lld%lld",&n,&m,&p);f[0]=f[1]=inv[1]=inv[0]=1;for(int i=2;i<=p;i++) f[i]=f[i-1]*i%p;for(int i=2;i<=p;i++) inv[i]=(p-p/i)*inv[p%i]%p;for(int i=2;i<=p;i++) inv[i]=inv[i]*inv[i-1]%p;printf("%lld\n",lucas(n+m,m,p));}return 0; }

?

轉載于:https://www.cnblogs.com/song-/p/9776026.html

總結

以上是生活随笔為你收集整理的洛谷——P3807 【模板】卢卡斯定理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。