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;
}



全部评论

相关推荐

12-15 18:00
巨人网络_招聘
投递巨人网络等公司8个岗位
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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