额这个题把我吓惨了
原因是当时学长说CQOI全都是模板题结果我根本不会
o(* ̄︶ ̄*)o
BSGS模板
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
using namespace std;
#define LL long long
inline void read(int &x){
x=0;
char ch=getchar();
int f=1;
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
x*=f;
}
map<LL,int>mmp;
int g,mod;
int A,B;
inline LL quick_pow(LL x,int k){
LL ret=1;
while(k){
if(k%2==1){
ret=ret*x%mod;
}
x=x*x%mod;
k/=2;
}
return ret;
}
int main(){
// freopen("test.in","r",stdin);
read(g);
read(mod);
int Cas;
read(Cas);
while(Cas--){
mmp.clear();
read(A);
read(B);
int m=ceil(sqrt(mod));
mmp[A%mod]=0;
LL now=1;
for(int i=1;i<=m;i++){
now=now*g%mod;
mmp[A*now%mod]=i;
}
LL t=quick_pow(g,m);
LL ans=1;
for(int i=1;i<=m;i++){
ans=ans*t%mod;
if(mmp.count(ans)){
LL key=i*m-mmp[ans];
key=(key%mod+mod)%mod;
cout<<quick_pow(B,key)%mod<<'\n';
break;
}
}
}
}