用了线性求解,但是还是30pts,求dalao教卡常Orz
查看原帖
用了线性求解,但是还是30pts,求dalao教卡常Orz
244597
kabout楼主2023/1/3 20:51
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll M,K;
#define TLE ios::sync_with_stdio(0),cin.tie(0)
ll n,m,t,a[5000001],b[5000001];
ll ksm(ll x,ll p)
{
	ll re=1;
	while(p)
	{
		if(p&1)re=re*x%M;
		p>>=1;
		x=x*x%M;
	}
	return re;
}
int main()
{
 	TLE;
 	ll sum=0;
 	a[0]=b[0]=1;
 	cin>>n>>M>>K;
	for(register int i=1;i<=n;i++)
		cin>>a[i];
	for(register int i=1;i<=n;i++)//再求前缀积
		b[i]=b[i-1]*a[i]%M;
	ll zny=ksm(b[n],M-2);//1/a1*a2*a3......an
	for(register int i=n;i>=1;i--)
	{
		b[i]=zny*b[i-1]%M;
		zny=zny*a[i]%M;
	}//求完逆元
	ll pre=K;
	for(register int i=1;i<=n;i++)
	{
		sum=(sum+b[i]*pre%M)%M;
		pre=pre*K%M;
	}
	cout<<sum<<endl;
 	return 0;
}
2023/1/3 20:51
加载中...