我完蛋了
查看原帖
我完蛋了
104662
PrincessQi楼主2021/8/6 23:38

这种题都能发求助帖,艹

最后一个点输出无解,求教

#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;
}
2021/8/6 23:38
加载中...