求卡常悬关
查看原帖
求卡常悬关
716260
SegmentTree_楼主2024/4/2 23:15
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 5e6+5;
template <typename T>
inline void read(T &x)//快读
{
    char c;
    x = 0;
    int fu = 1;
    c = getchar();
    while(c > 57 || c < 48)
    {
        if(c == 45)
        {
            fu = -1;
        }
        c = getchar();
    }
    while(c <= 57 && c >= 48)
    {
        x = (x << 3) + (x << 1) + c - 48;
        c = getchar();
    }
    x *= fu;
}
template <typename T>
inline void fprint(T x)//快输
{
    if(x < 0)
    {
        putchar(45);
        x = -x;
    }
    if(x > 9)
    {
        fprint(x / 10);
    }
    putchar(x % 10 + 48);
}
int n;
ll p, k;
ll a[N], pre[N], suf[N];
ll sum;
ll qpow(ll a, ll b, ll m){
	ll res = 1;
	while (b){
		if (b & 1) res = res * a % m;
		a = a * a % m;
		b >>= 1;
	}
	return res % m;
}
int main(){
	//ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	read(n);
	read(p);
	read(k);
	pre[0] = suf[n + 1] = 1;
	for (int i = 1;i <= n;++i){
		cin >> a[i];
		pre[i] = a[i] * pre[i - 1] % p;
	}
	for (int i = n;i >= 1;i--){
		suf[i] = a[i] * suf[i + 1] % p;
	}
	ll k1 = k;
	for (int i = 1;i <= n;++i){
		sum = (sum + (k1 * pre[i - 1] % p) * suf[i + 1] % p) % p;
		k1 = (k1 * k) % p;
	}
	fprint((sum * qpow(pre[n], p - 2, p)) % p);
	return 0;
} 
2024/4/2 23:15
加载中...