80pts 求助!
查看原帖
80pts 求助!
922691
Hisy楼主2024/4/6 11:23
#include<cstdio>
#include<map>
#define int long long
using namespace std;
inline int sqrt(int sqrtner){
	if(sqrtner<4){
		return 1;
	};
	int low=0,high=sqrtner;
	while(low<high){
		int middle=(low+high+1)>>1;
		if(middle*middle>sqrtner){
			high=middle-1;
		}else{
			low=middle;
		};
	};
	if(low*low>sqrtner){
		return high;
	};
	return low;
};
inline int power(int first,int second,int mod){
	int result=1;
	while(second){
		if(second&1){
			(result*=first)%=mod;
		};
		second>>=1;
		(first*=first)%=mod;
	};
	return (result%mod+mod)%mod;
};
inline int exgcd(int gcdarg1,int gcdarg2,int &answer1,int &answer2){
	if(gcdarg2==0){
		answer1=1;
		answer2=0;
		return gcdarg1;
	};
	int result=exgcd(gcdarg2,gcdarg1%gcdarg2,answer1,answer2);
	int answer=answer1;
	answer1=answer2;
	answer2=answer-(gcdarg1/gcdarg2)*answer1;
	return result;
};
inline int baby_giant_step(int first,int second,int mod){
	map<int,int> hash;
	int cur=1,sqrtner=sqrt(mod)+1;
	for(int iter=1;iter<=sqrtner;++iter){
		(cur*=first)%=mod;
		hash[second*cur%mod]=iter;
	};
	int now=cur;
	for(int iter=1;iter<=sqrtner;++iter){
		if(hash[now]){
			return iter*sqrtner-hash[now];
		};
		(now*=cur)%=mod;
	};
	return -1;
};
signed main(signed,char**){
	int test,type;
	scanf("%lld %lld",&test,&type);
	while(test--){
		int first,second,third;
		scanf("%lld %lld %lld",&first,&second,&third);
		if(type==1){
			printf("%lld\n",power(first,second,third));
		}else if(type==2){
			int answer1,answer2;
			int result=exgcd(first,third,answer1,answer2);
			if(second%result==0){
				int tmp=third/result;
				answer1=(((answer1*second)/result)%tmp+tmp)%tmp;
				printf("%lld\n",answer1);
			}else{
				puts("Orz, I cannot find x!");
			};
		}else{
			int answer=baby_giant_step(first,second,third);
			if(answer==-1||answer==0||answer==1){
				puts("Orz, I cannot find x!");
			}else{
				printf("%lld\n",answer);
			};
		};
	};
	return 0;
};

在第 2121 个点 WAWA 了。

InputInput:

1 3
1000003 2000006 1000003

OutputOutput:

Orz, I cannot find x!

AnswerAnswer:

1
2024/4/6 11:23
加载中...