玄关求调,MLE#4#5
查看原帖
玄关求调,MLE#4#5
731671
USA_CO楼主2025/7/24 20:06

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e6 + 1;
int n, p, k;
int a[N], po[N], s[N], inv_s[N];
int ans = 0;
int read(){
    int x=0,flag=1;
    char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')flag=-1;ch=getchar();}
    while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
    return flag*x;
}
int qp(int x, int y, int mod) {
    int res = 1;
    x %= mod;
    while (y > 0) {
        if (y % 2) res = res * x % mod;
        x = x * x % mod;
        y >>= 1;
    }
    return res;
}

signed main() {
    n=read(),p=read(),k=read();
    for (int i = 1; i <= n; i++) {
        a[i]=read();
    }
    po[0] = 1;
    s[0] = 1;
    for (int i = 1; i <= n; i++) {
        po[i] = po[i-1] * k % p;
        s[i] = s[i-1] * a[i] % p;
    }
    inv_s[n] = qp(s[n], p-2, p);
    for (int i = n-1; i >= 0; i--) {
        inv_s[i] = inv_s[i+1] * a[i+1] % p;
    }
    for (int i = 1; i <= n; i++) {
        int inv_a = inv_s[i] * s[i-1] % p;
        ans = (ans + po[i] * inv_a % p) % p;
    }
    printf("%lld\n", ans);
    return 0;
}
2025/7/24 20:06
加载中...