这种题都能发求助帖,艹
最后一个点输出无解,求教
#include<bits/stdc++.h>
#define int long long
using namespace std;
map<int,int>mp;
int p,b,n,k,T;
int mul(int a,int b){
return (a*(b>>25)%p*(1<<25)%p+a*(b&((1<<25)-1))%p)%p;
}
signed main(){
scanf("%lld%lld",&k,&p);
b=10;
n=9*k+1;
T=sqrt(p)+1;
int nw=n;
for(int i=0;i<T;i++){
mp[nw]=i+1;
nw=mul(nw,b);
}
int w=1;
for(int i=1;i<=T;i++)
w=mul(w,b)%p;
nw=1;
for(int i=1;i<=p/T;i++){
nw=mul(nw,w)%p;
if(mp[nw]){
printf("%lld\n",((mul(i,T)-mp[nw]+1)%p+p)%p);
return 0;
}
}
for(int i=p/T*T;i<=p;i++){
if(nw==n){
printf("%lld\n",i);
return 0;
}nw=mul(nw,b);
}
puts("no solution");
return 0;
}