被卡常啦 >_< ,铅条
查看原帖
被卡常啦 >_< ,铅条
1283976
sllhy7楼主2025/7/25 09:57
#include <bits/stdc++.h>
using namespace std;
long long n,p,k,s,i,x[5000010],ans,sss1[5000010],sss2[5000010];
long long ppp(long long ss,long long tt){
	long long pp=1;
	ss=ss%p;
	while(tt!=0){
		if(tt%2==1) pp=(pp*ss)%p;
		ss=(ss*ss)%p;
		tt/=2;
	}
	return pp;
} 
long long ny(long long w){
	if(w==1) return 1;
	return (((p-p/w)*ny(p%w))%p);
}

void read(long long &xxx)
{
	xxx=0;
	char ch=getchar();
	while (ch<'0'||ch>'9'){
		ch=getchar();
	}
	while (ch>='0'&&ch<='9'){
		xxx=xxx*10+ch-48;
		if(xxx>=p) xxx=xxx%p;
		ch=getchar();
	}
	xxx=xxx%p;
}

void read2(long long &kkk)
{
	kkk=0;
	char ch=getchar();
	while (ch<'0'||ch>'9'){
		ch=getchar();
	}
	while (ch>='0'&&ch<='9'){
		kkk=kkk*10+ch-48;
		ch=getchar();
	}
	kkk=kkk;
}

int main(){
	read2(n),read2(p),read(k);
	sss1[0]=1,sss2[n+1]=1;
	x[0]=1,x[n+1]=1;
	for(i=1;i<=n;i++){
		read(x[i]);
		sss1[i]=((sss1[i-1]*x[i-1])%p);
	}
	for(i=n;i>=1;i--){
		sss2[i]=((sss2[i+1]*x[i+1])%p)%p;
	}	
	for(i=1;i<=n;i++){
		sss1[i]=(sss1[i]*sss2[i])%p;
	}
	for(i=1;i<=n;i++){
		ans=(ans+(ppp(k,i)*sss1[i])%p)%p;
	} 
	printf("%lld",((ans*ny((sss1[n]*x[n])%p)+p)%p));
	return 0;
}
2025/7/25 09:57
加载中...