社区讨论
被卡常啦 >_< ,铅条
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 条回复,欢迎继续交流。
正在加载回复...