P5431 乘法逆元 2

等式变换
取模后的被除数遇除法 变成 要乘逆元
没取之前,可以直接除再取模
#include<bits/stdc++.h>
using namespace std;
namespace{
	template<typename T>
	inline void read(T &s){
		T f=1;s=0;char ch=getchar();
		for(;!isdigit(ch);ch=getchar()) f=-1;
		for(;isdigit(ch);ch=getchar()) s=(s<<1)+(s<<3)+(ch^48);
	}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
int const N=5e6+7;
ll n,mod,k;
ll b[N],b2[N],a[N];  //kk[N]
inline int ksm(ll a,int b){
	ll res=1;
	while(b){
		if(b&1) (res*=a)%=mod;
		b >>= 1;
		a*=a;
		a%=mod;
	}
	return res;
}
int main(){
	//fio;
	//cin >> n >> mod >> k;
	read(n);read(mod);read(k);
	//kk[0]=1;
	b[0]=1;
	for(register int i=1;i<=n;++i){
		//cin >> a[i];
		read(a[i]);
		//kk[i]=kk[i-1]*k%mod;
		b[i]=b[i-1]*a[i]%mod;
	}
	b2[n+1]=1;ll ans=0,kk=1;
	for(register int i=n;i>=1;--i){
		b2[i]=b2[i+1]*a[i]%mod;
	}
	for(register int i=1;i<=n;++i){
		(kk*=k)%=mod;
		ans+=b[i-1]*b2[i+1]%mod *kk%mod;
		ans%=mod;
	}
	ans*=ksm(b[n],mod-2);
	cout << ans%mod ;
	return 0;
}



全部评论

相关推荐

07-18 18:05
门头沟学院 Java
挂了&nbsp;正式批求捞
投递滴滴等公司9个岗位
点赞 评论 收藏
分享
06-26 15:33
青岛工学院 Java
积极的秋田犬要冲国企:他现在邀请我明天面试
点赞 评论 收藏
分享
07-17 11:50
门头沟学院 Java
投递腾讯等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务