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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P2480-[SDOI2010]古代猪文【中国剩余定理,Lucas定理】

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P2480-[SDOI2010]古代猪文【中国剩余定理,Lucas定理】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大早上起來寫題有助于醒腦(其實是昨晚沒睡好/kk


正題

題目鏈接:https://www.luogu.com.cn/problem/P2480


題目大意

給出nnnggg,求g∑d∣nCnd%999911659g^{\sum_{d|n}C_{n}^d}\% 999911659gdn?Cnd?%999911659


解題思路

因為999911659999911659999911659是質數,根據歐拉定理我們就有g∑d∣nCnd%999911658%999911659g^{\sum_{d|n}C_n^d\% 999911658}\% 999911659gdn?Cnd?%999911658%999911659

接下來就是要求∑d∣nCnd%999911658\sum_{d|n}C_n^d\% 999911658dn?Cnd?%999911658
顯然nnn這么大師需要LucasLucasLucas定理的,但是模數不是質數,考慮拆開,有999911658=2?3?4679?35617999911658=2*3*4679*35617999911658=2?3?4679?35617。如果我們求出∑d∣nCnd\sum_{d|n}C_n^ddn?Cnd?在這4個模數下的值,我們可以用中國剩余定理
{x≡a1(mod2)x≡a2(mod3)x≡a3(mod4679)x≡a4(mod35617)\left\{\begin{matrix}x\equiv a_1(mod\ \ 2)\\x\equiv a_2(mod\ \ 3)\\x\equiv a_3(mod\ \ 4679)\\x\equiv a_4(mod\ \ 35617)\end{matrix}\right.????????xa1?(mod??2)xa2?(mod??3)xa3?(mod??4679)xa4?(mod??35617)?
求出xxx的解值就是∑d∣nCnd%999911658\sum_{d|n}C_n^d\% 999911658dn?Cnd?%999911658的值了


codecodecode

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll P=999911658,m[4]={2,3,4679,35617},N=35620; ll n,g,ans,fac[N],a[4],M[4]; ll power(ll x,ll b,ll p){ll ans=1;while(b){if(b&1)ans=ans*x%p;x=x*x%p;b>>=1;}return ans; } ll C(ll n,ll m,ll p){if(n<m)return 0ll;return fac[n]*power(fac[m],p-2,p)%p*power(fac[n-m],p-2,p)%p; } ll Lucas(ll n,ll m,ll p){if(n<m)return 0ll;if(!n)return 1ll;return Lucas(n/p,m/p,p)*C(n%p,m%p,p)%p; } void Count(ll p,ll P){for(ll i=1;i<=P;i++)fac[i]=fac[i-1]*i%P;for(ll i=1;i*i<=n;i++)if(n%i==0){(a[p]+=Lucas(n,i,P))%=P;if(i*i!=n)(a[p]+=Lucas(n,n/i,P))%=P;}return; } void CRT(){for(ll i=0;i<4;i++){M[i]=P/m[i];(ans+=a[i]*M[i]%P*power(M[i],m[i]-2,m[i])%P)%=P;}return; } int main() {scanf("%lld%lld",&n,&g);if(g%(P+1)==0){printf("0");return 0;}fac[0]=1;for(ll i=0;i<4;i++)Count(i,m[i]);CRT();printf("%lld",power(g,ans,P+1));return 0; }

總結

以上是生活随笔為你收集整理的P2480-[SDOI2010]古代猪文【中国剩余定理,Lucas定理】的全部內容,希望文章能夠幫你解決所遇到的問題。

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