BZOJ 1951 Sdoi2010 古代豬文

2022-04-30 04:18:06 字數 1190 閱讀 2484

【題意】給定g,n,求:

$$ans=g^\binom}\ \mod\ \ p$$

1<=n,g<=10^9,p=999911659。

【演算法】尤拉定理+組合數取模(lucas)+中國剩餘定理(crt)

【題解】

先考慮簡化冪運算,因為模數為素數,由尤拉定理可知g^k=g^(k%φ(p)) mod p,顯然g^(k%φ(p)) mod p可以用快速冪求解

但是尤拉定理要求(g,p)=1,當g=p時不滿足條件,可以特判答案為0或者用擴充套件尤拉定理(b%φ(p)+(b>=φ(p)?φ(p):0))。

故我們實際要求:

$$\sum_\binom\ \mod\ \ (p-1)$$

因為p是素數,φ(p)=p-1=999911658=2*3*4679*35617。

因為p-1分解後無平方因子,所以直接用lucas分別對素模數計算後用中國剩餘定理合併即可(若有則需要參考bzoj禮物的方法——擴充套件lucas)

#include#include

#define ll long long

using

namespace

std;

const

int maxn=100010,mod=999911659;//

999911658=2*3*4679*35617

const

int p[5]=;

ll a[

5],fac[5

][maxn],n,g;

ll power(ll x,ll k,ll p)

return

ans;

}ll c(ll n,ll m,ll k)

ll lucas(ll n,ll m,ll k)

intmain()

for(int k=1;k<=4;k++)

for(int i=1;i*i<=n;i++)if(n%i==0

)

}ll m=mod-1

; ll ans=0

;

for(int k=1;k<=4;k++)ans=(ans+a[k]*m/p[k]*power(m/p[k],p[k]-2,p[k]))%m;

printf(

"%lld

",power(g,ans,mod));

return0;

}

view code

bzoj 1951 Sdoi2010 古代豬文

求這個東西 g k nk cknm od999911659 這題就是把幾個模板弄在一起。首先尤拉定理 g k nk cknm od 999911659 m od999911659 g k nkck nmod 999911658mo d999911659 然後將999911658拆成2 3 4679 ...

bzoj1951 Sdoi2010 古代豬文

time limit 1 sec memory limit 64 mb有且僅有一行 兩個數n g,用乙個空格分開。有且僅有一行 乙個數,表示答案除以999911659的餘數。4 210 的資料中,1 n 50 20 的資料中,1 n 1000 40 的資料中,1 n 100000 100 的資料中,...

BZOJ1951 SDOI2010 古代豬文

在那山的那邊海的那邊有一群小肥豬。他們活潑又聰明,他們調皮又靈敏。他們自由自在生活在那綠色的大草坪,他們善良勇敢相互都關心 選自豬王國民歌 很久很久以前,在山的那邊海的那邊的某片風水寶地曾經存在過乙個豬王國。豬王國地理位置偏僻,實施的是適應當時社會的自給自足的莊園經濟,很少與外界聯絡,商貿活動就更少...