P5431 模意义下的乘法逆元 2
P5431 模意义下的乘法逆元 2
非常不友好的题
卡常非常严格
下面的代码仍然有部分样例TLE(请勿参考)
鉴于写的自闭了,还是把中间能看的代码发出来
但是可以通过这题,获得求\(i!\)和\(1/(i!)\)时一样的灵感
代码:
ll n,p,k,inv,ans;
int arr[N],kpow[N],f[N],g[N];//f:前缀积 g:f逆
inline ll qpow(ll a,ll b)
{
ll ans=1;
while(b){
if(b&1) ans=(ll)ans*a%p;
a=(ll)a*a%p;
b>>=1;
}
return ans;
}
void init()//初始化kpow,f,g
{
kpow[0]=1;
for(int i=1;i<=n;++i){
kpow[i]=(ll)kpow[i-1]*k%p;
}
f[0]=1;
for(int i=1;i<=n;++i){
f[i]=(ll)f[i-1]*arr[i]%p;
}
g[n]=qpow(f[n],p-2);
for(int i=n-1;i>=1;--i){
g[i]=(ll)g[i+1]*arr[i+1]%p;
}
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
ll d=0,s=0,t=0;
cin>>n>>p>>k;
for(int i=1;i<=n;++i){
cin>>arr[i];
}
init();
for(int i=1;i<=n;++i){
inv=(ll)g[i]*f[i-1]%p;
ans=(ans+(ll)kpow[i]*inv%p)%p;
}
cout<<ans;
return 0;
}

浙公网安备 33010602011771号