60分求助
查看原帖
60分求助
287355
1lgorithm楼主2021/11/15 19:12

WA

#include<iostream>
#include<map>
#include<cmath>
using namespace std;
#define ll __int128
map <ll,ll> vis;
ll mul(ll a,ll b,ll p){
	ll ans=0;
	while(b){
		if(b&1) ans=(ans+a)%p;
		a=(a<<1)%p;
		b>>=1;
	}
	return ans;
}
ll qpmod(ll a,ll b,ll p){
	ll ans=1%p;
	while(b){
		if(b&1) ans=mul(ans,a,p);
		a=mul(a,a,p);
		b>>=1;
	}
	return ans;
}
int main(){
	long long B,P;
	cin>>B>>P;
	ll b=B,p=P;
	ll a=10;
	b=b*9+1;
	b%=p;
	a%=p;
	ll num=sqrt((long long)p);
	vis[1]=0;
	ll a_num=qpmod(a,num,p),now=a_num;
	for(ll i=num;i<=p;i+=num){
		vis[now]=i;
		now=mul(now,a_num,p);
	}
	now=1;
	for(ll i=0;i<num;i++){
		if(vis.count(mul(b,now,p))){
			cout<<(long long)(vis[mul(b,now,p)]-i);
			return 0;
		}
		now=mul(now,a,p);
	}
	cout<<"no solution";
}
2021/11/15 19:12
加载中...