代码如下:
#include <cstdio>
#define ll long long
#define rg register
inline ll read() {
rg ll x=0,f=0;
rg char p=getchar();
while (p<'0' || p>'9') f|=(p=='-'?-1:0),p=getchar();
while (p>='0' && p<='9') x=(x<<3)+(x<<1)+(p^48),p=getchar();
return x^f;
}
inline ll Exgcd(ll a,ll b,ll &x,ll &y) {
if (!b) {x=1,y=0;return a;}
else {
ll d=Exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
}
ll ai[5000005],w[5000005];
int main(){
ll n=read(),p=read(),k=read(),s=1,x,y,wh=0;
for (rg ll i=1;i<=n;i++){
ai[i]=read();
s*=ai[i];
}
for (rg ll i=1,ki=k;i<=n;i++){
w[i]=s/ai[i]*ki;
ki*=k;
wh=(wh+w[i])%p;
}
Exgcd(s,p,x,y);
x=(x%p+p)%p;
printf("%lld",((x*wh)%p));
return 0;
}
求带佬看看为什么输出0