30pts
求调
时间够
但不知为何WA了
#include<bits/stdc++.h>
using namespace std;
long long n,k,a[5000001],c[5000001],cc[500003],aa=1,kk=1,s,ans;
unsigned long long p;
long long ksm(long long a,long long b,unsigned long long p)
{
long long ans=1;
while(b)
{
if(b&1)
ans=ans*a%p;
b>>=1;
a=a*a%p;
}
return ans%p;
}
void read(long long &kkk)
{
kkk=0;
char ch=getchar();
while (ch<'0'||ch>'9'){
ch=getchar();
}
while (ch>='0'&&ch<='9'){
kkk=kkk*10+ch-48;
ch=getchar();
}
kkk=kkk;
}
int main()
{
read(n);
cin>>p;
read(k);
a[0]=1;
c[0]=1;
for(int i=1;i<=n;i++)
{
read(a[i]);
aa=aa*a[i]%p;
c[i]=c[i-1]*a[i-1]%p;
}
cc[n+1]=cc[n]=1;
for(int i=n-1;i>=1;i--)
{
cc[i]=cc[i+1]*a[i+1]%p;
c[i]=c[i]*cc[i]%p;
}
for(int i=1;i<=n;i++)
{
kk=kk*k%p;
s=kk*c[i]%p;
ans=(ans+s)%p;
}
ans=ans*ksm(aa,p-2,p)%p;
cout<<ans;
return 0;
}