rt,代码比较清奇,BSGS按照 ak+m−r 的方式处理,开了__int128,但是WA80
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define __int128 long long
using namespace std;
map<__int128,int>mp;
__int128 bsgs(__int128 y,__int128 z,__int128 p){
__int128 m=(__int128)ceil(sqrt(double(p))),mult=1;
for(int r=1;r<=m;r++){
mult=mult*y%p;
z=z*y%p;
mp[z]=r;
}
y=mult;
for(int k=1;k<=m;k++){
if(mp[mult])
return k*m-mp[mult];
mult=mult*y%p;
}
return -1;
}
__int128 read(){
__int128 x=0;
char c=getchar();
while(c<'0'||c>'9')
c=getchar();
while(c>='0'&&c<='9'){
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
}
return x;
}
void write(__int128 x){
if(!x)
return;
write(x/10);
putchar(x%10+'0');
}
int main(){
__int128 k=read(),m=read();
write(bsgs(10,9*k+1,m));
printf("\n");
return 0;
}