虽然我知道这不是正解,但是我还是想来问一下为什么这段代码会UKE一个点(
#include <bits/stdc++.h>
using namespace std;
int t,p,a,b,c;
int x;
int nx;
bool f[100005],yyyy;
queue<int> q;
void doit(int i){
if (i==1) nx=(x*a)%p;
if (i==2) nx=(x+b)%p;
return;
}
int main(){
cin>>t;
while (t--){
while (!q.empty()) q.pop();
for (int i=1;i<=100000;++i) f[i]=0;
q.push(0);
cin>>p>>a>>b>>c;
f[0]=1; yyyy=0;
while (!q.empty()){
x=q.front();
q.pop();
if (x==c) {
cout<<"Yes"<<endl;
yyyy=1;
break;
}
for (int i=1;i<=2;++i){
doit(i);
if (!f[nx]) q.push(nx),f[nx]=1;
}
}
if (!yyyy) cout<<"No"<<endl;
}
return 0;
}