社区讨论

被卡常啦 >_< ,铅条

P5431【模板】模意义下的乘法逆元 2参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mdi6b3iq
此快照首次捕获于
2025/07/25 09:59
8 个月前
此快照最后确认于
2025/11/04 03:46
4 个月前
查看原帖
CPP
#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;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...