3AC 2CE
查看原帖
3AC 2CE
183761
lvyijia44楼主2020/10/30 00:14
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
using namespace std;
typedef unsigned long long ull;
const int maxn=5e6+5;

inline ull read(){
    ull ans=0,f=1;
    char ch=getchar();
    while(ch<'0' || ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9'){
        ans=(ans<<3)+(ans<<1)+ch-'0';
        ch=getchar();
    }
    return ans*f;
}

ull n,p,k;
ull a[maxn],s[maxn]={1},s1[maxn];
inline ull mul(ull a,ull b){
    ull base=a,ans=1;
    while(b){
        if(b&1)
            ans=(ans*base)%p;
        base=(base*base)%p;
        b>>=1;
    }
    return ans;
}

int main(){
    n=read();p=read();k=read();
    for(int i=1;i<=n;i++)
        a[i]=read(),s[i]=(s[i-1]*a[i])%p;//putchar('\n'),
    s1[n]=mul(s[n],p-2);
    for(int i=n;i>=2;i--)
        s1[i-1]=(s1[i]*a[i])%p;
    ull ans=0,kk=k;
    for(int i=1;i<=n;i++){
        ans=(ans+((s[i-1]*s1[i])%p)*kk)%p;
        kk=(kk*k)%p;
    }
    printf("%lld",ans);
    return 0;
}
2020/10/30 00:14
加载中...