0pts求助
查看原帖
0pts求助
785639
xuchuhan楼主2024/4/6 14:59
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e6+5;
int n,p,k,ans,p2=1;
int a[N],s[N],sv[N],inv[N];
int Fpow(int a,int b,int p){
	int ans=1;
	while(b){
		if(b&1)
			ans=ans*a%p;
		a=a*a%p;
		b/=2;
	}
	return ans;
}
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return x*f;
}
void write(int x){
    if(x<0)
        putchar('-'),x=-x;
    if(x>9)
        write(x/10);
    putchar(x%10+'0');
    return;
}
signed main(){
	n=read(),p=read(),k=read();
	s[0]=1;
	for(int i=1;i<=n;i++){
		a[i]=read();
		s[i]=s[i-1]*a[i]%p;
	}
	sv[n]=Fpow(s[n],p-2,p);
	for(int i=n;i>=1;i--)
		sv[i-1]=sv[i]*a[i]%p;
	for(int i=1;i<=n;i++)
		inv[i]=s[i-1]*sv[i]%p;
	for(int i=1;i<=n;i++){
		p2*=k;
		ans+=p2*inv[i];
		p2%=p,ans%=p;
	}
	write(ans);
	return 0;
}
2024/4/6 14:59
加载中...