bdfz_2024_summer/day7/P5431/P5431.cpp

89 lines
1.4 KiB
C++
Raw Normal View History

2024-08-09 04:02:40 +00:00
//TLE 30
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAX_N =5e6+5;
int binExp(int b,int e,int p){
int r=1;
while(e>0){
if(e%2==1)r=(r*b)%p;
b=(b*b)%p;
e=e>>1;
}
return r;
}
int inverse(int b,int p){
return binExp(b, p-2,p);
}
#ifdef OITEST
#endif
#ifndef OITEST
#endif
#ifndef OITEST
int read(){
int x=0,w=1;
char ch=0;
while(!isdigit(ch)){
if(ch=='-')w=-1;
ch=getchar();
}
while(isdigit(ch)){
x=x*10+(ch-'0');
ch=getchar();
}
return x*w;
}
#endif
signed main(signed argc,char *argv[]){
ios::sync_with_stdio(false);
cin.tie(0);
#ifdef OITEST
assert(argc==3);
cout<<argv[1]<<endl<<argv[2]<<endl;
ifstream ifile(argv[1]);
ifstream afile(argv[2]);
assert(ifile.is_open()&&afile.is_open()==true);
stringstream ss;
#define cin ifile
#define cout ss
#endif
int n,p,k;
#ifdef OITEST
cin>>n>>p>>k;
#endif
#ifndef OITEST
n=read();
p=read();
k=read();
#endif
int ans=0;
int kp=k;
for(int i=1;i<=n;i++){
int a;
#ifdef OITEST
cin>>a;
#endif
#ifndef OITEST
a=read();
#endif
ans=((int)(kp*inverse(a, p))%p+ans)%p;
kp=(kp*k)%p;
}
cout<<ans<<endl;
#ifdef OITEST
int my,anser;
cout>>my;
afile>>anser;
assert(my==anser);
#endif
}