爆零了,爆零了
查看原帖
爆零了,爆零了
420560
telemishon楼主2021/9/16 22:07

代码如下:

#include <cstdio>
#define ll long long
#define rg register
inline ll read() {
	rg ll x=0,f=0;
	rg char p=getchar();
	while (p<'0' || p>'9') f|=(p=='-'?-1:0),p=getchar();
	while (p>='0' && p<='9') x=(x<<3)+(x<<1)+(p^48),p=getchar();
	return x^f;
}
inline ll Exgcd(ll a,ll b,ll &x,ll &y) {
    if (!b) {x=1,y=0;return a;}
    else {
    	ll d=Exgcd(b,a%b,y,x);
		y-=a/b*x;
		return d;
	}
}
ll ai[5000005],w[5000005];
int main(){
	ll n=read(),p=read(),k=read(),s=1,x,y,wh=0;
	for (rg ll i=1;i<=n;i++){
		ai[i]=read();
		s*=ai[i];
	}
	for (rg ll i=1,ki=k;i<=n;i++){
		w[i]=s/ai[i]*ki;
		ki*=k;
		wh=(wh+w[i])%p;
	}
	Exgcd(s,p,x,y);
	x=(x%p+p)%p;
	printf("%lld",((x*wh)%p));
	return 0;
}

求带佬看看为什么输出0

2021/9/16 22:07
加载中...