#include<bits/stdc++.h>
using namespace std;
inline int ifread()
{
int ret=0;
char c=getchar();
while(c<'0' || c>'9') c=getchar();
while(c>='0' && c<='9')
{
ret=(ret<<1)+(ret<<3)+c-'0';
c=getchar();
}
return ret;
}
inline long long lfread()
{
long long ret=0;
char c=getchar();
while(c<'0' || c>'9') c=getchar();
while(c>='0' && c<='9')
{
ret=(ret<<1)+(ret<<3)+(c&15);
c=getchar();
}
return ret;
}
inline void lfprint(long long x)
{
if(x>9) lfprint(x/10);
putchar(x%10+48);
}
inline long long exgcd(long long a,long long b,long long &x,long long &y)
{
if(!b)
{
x=1;
y=0;
return a;
}
int ret=exgcd(b,a%b,y,x);
y-=a/b*x;
return ret;
}
inline long long gcd(long long a,long long b)
{
return a==0 ? b : gcd(b%a,a);
}
unsigned long long a[5000000],ki[5000000];
int main()
{
register int n=ifread();
register long long p=lfread(),k=lfread();
ki[0]=k;
a[0]=lfread();
register long long m=a[0],x,y;
for(register int i=1;i<n;i++)
{
a[i]=lfread();
m=m*a[i]/gcd(m,a[i]);
ki[i]=ki[i-1]*k%p;
}
ki[0]=m/a[0]*k;
for(register int i=1;i<n;i++) ki[i]=(ki[i]*m/a[i]%p+ki[i-1]+p)%p;
exgcd(m,p,x,y);
lfprint((ki[n-1]*((x%p+p)%p)+p)%p);
return 0;
}
测试数据无问题,但是还是0分,求助