CE 求助
查看原帖
CE 求助
654958
Light_az楼主2023/3/27 14:10
#include<bits/stdc++.h>
#define ll long long
#define F(i,j,n) for(int i=j;i<=n;i++)
#define Tr(v,e) for(int v:e)
#define D double
#define ps push_back
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const int N=5e6+10,NN=1e4+10;
ll n,m,k,x,y,u,v,w,cnt=1,ans=0,t=0,l,r,len,T;
ll mini=INT_MAX,maxi=0,p;
string s1,s2;
ll a[N],dp[N],sv,inv[N];
//改成 dp[N]={1} 会 CE
ll read(){
    ll s=0,w=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
		s=s*10+ch-'0';
		ch=getchar();
	}
    return s*w;
}
ll f(ll a,ll b){
	ll ans=1;
	while(b){
		if(b&1) ans*=a,ans%=p;
		a*=a,a%=p;
		b>>=1; 
	}
	return ans%p;
}
int main(){
	n=read(),p=read(),k=read();
	F(i,1,n) a[i]=read(); 
	dp[0]=1;
   //删除此处
	F(i,1,n) dp[i]=dp[i-1]*a[i]%p;
	sv=f(dp[n],p-2);
	for(int i=n;i>=1;i--) inv[i]=sv*dp[i-1]%p,sv=sv*a[i]%p;
	F(i,1,n){
		cnt*=k,cnt%=p; 
		ans=(ans+cnt*inv[i]%p)%p;
	}
	cout<<ans%p;
	return 0;
}
2023/3/27 14:10
加载中...