RT,这份代码是按着oiwiki上的方法来写的,但是只有30分,求助各位大佬帮忙看看哪里出错了。
#include<iostream>
#include<cstdio>
using namespace std;
const int N=3e6+10;
long long n,p,k,s[N],a[N],ans[N],res;
long long ms(long long x,long long y){
long long tem=1;
x=(x%p+p)%p;
while(y){
if(y&1){
tem=(x*tem)%p;
}
x=(x*x)%p;
y>>=1;
}
return tem;
}
int main(){
scanf("%lld%lld%lld",&n,&p,&k);
s[0]=1;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
s[i]=s[i-1]*a[i]%p;
}
ans[n]=ms(s[n],p-2);
for(int i=n;i>=1;i--){
ans[i-1]=ans[i]*a[i]%p;
}
long long u=1,v=0;
for(int i=n;i>=1;i--){
u=u*k%p;
res=(res+(ans[i]*s[i-1])%p)*k%p;
}
printf("%lld",res%p);
}