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