请问我的代码为什么全部TLE了呢,显示TLE一定是超时的问题吗?刚用洛谷不太明白 /kel
#include<bits/stdc++.h>
#define N 1000010
#define ll long long
using namespace std;
int n,ans[N],q,t=1e6,nw;
ll x,y,mod,a[N],pre[N],res,o,ned,sha[N],mi[N];
struct node{
ll k;
int num;
}e[N];
bool cmp(node ww,node gg){
return ww.k<gg.k;
}
ll ksm(ll x,ll P){
ll res=1ll;
for(;P;P>>=1,x=x*x%mod)
if(P&1) res=res*x%mod;
return res;
}
int main()
{
scanf("%d%lld%lld%lld",&n,&x,&y,&mod);
pre[0]=1ll;
for(int i=1;i<=t;i++) pre[i]=(pre[i-1]*x%mod+1ll)%mod;
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%lld",&e[i].k);
e[i].num=i;
}
sort(e+1,e+1+q,cmp);
ned=ksm(x,t);
for(int i=1;i<=q;i++){
while(e[i].k-1-nw>=t){
nw+=t;
res=(res*ned%mod+pre[t]*y%mod)%mod;
}
res=(res*ksm(x,e[i].k-nw)%mod+pre[e[i].k-1-nw]*y%mod)%mod;
nw=e[i].k;
sha[i]=res;
mi[i]=ksm(x,e[i].k);
}
for(int i=1;i<=n;i++){
if(a[i]>=mod) continue;
for(int j=1;j<=q;j++)
if((sha[j]+mi[j]*a[i]%mod)%mod==a[i])
ans[e[j].num]++;
}
for(int i=1;i<=q;i++) printf("%d\n",ans[i]);
return 0;
}