求调代码
#include<bits/stdc++.h>
#define int __int128
using namespace std;
map<int,int> mp;
int read(){
int s=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){s=(s<<3)+(s<<1)+ch-48;ch=getchar();}
return s*f;
}
void write(int x) {
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
int gcd(int a,int b){
if (!b)return a;
return gcd(b,a%b);
}
void exgcd(int a,int b,int &x,int &y){
if(!b)x=1,y=0;
else{
exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
}
}
int inv(int a,int b){
int x,y;
exgcd(a,b,x,y);
return (x%b+b)%b;
}
int qpow(int a,int b,int p){
int ans=1,base=a;
while(b){
if(b&1) ans=ans*base%p;
base=base*base%p;
b>>=1;
}
return ans%p;
}
int bsgs(int a,int b,int p){
mp.clear();
long double kkksc03=(p);
int k=ceil(sqrt(kkksc03));
b%=p;
for(int i=1;i<=k;i++) b=b*a%p,mp[b]=i;
a=qpow(a,k,p),b=1;
for(int A=1;A<=k;A++){
b=b*a%p;
if(mp[b]) return (A*k-mp[b]+p)%p;
}
return -1;
}
int exbsgs(int a,int b,int p){
if(b==1||p==1) return 0;
int g=gcd(a,p),k=0,no=1;
while(g>1){
if(b%g) return -1;
k++,b/=g,p/=g,no=no*(a/g)%p;
if(no==b) return k;
g=gcd(a,p);
}
int f=bsgs(a,b*inv(no,p)%p,p);
if(f==-1) return -1;
return f+k;
}
signed main(){
return 0;
}