求助奇怪的CE
  • 板块学术版
  • 楼主__frj
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/9/11 20:11
  • 上次更新2023/11/4 07:02:55
查看原帖
求助奇怪的CE
89338
__frj楼主2021/9/11 20:11
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map> 

using namespace std;
inline long long read(){
	long long res=0;
	long long f=1;
	char ch;
	while((ch=getchar())<'0'||ch>'9')
		if(ch=='-')f=-1;
	res=ch^48;
	while((ch=getchar())<='9'&&ch>='0')
		res=(res<<3)+(res<<1)+(ch^48);
	return res*f;
}
long long power(long long a,long long b,long long mod){
	if(b==0){
		return 1%mod;  
	}
	long long ans=1;
	while(b){
		if(b%2==1){
			ans=(ans*a)%mod;
		}
		a=(a*a)%mod;
		b/=2;
	}
	return ans % mod;
}
long long BSGS(long long a,long long b,long long p){
	map <long long , long long> Hash;
	Hash.clear();
	b%=p;
	if(b==1){
		return 0;
	}
	long long t=sqrt(p); 
	for(long long i=0;i<=t;i++){
		Hash[(long long)b*power(a,i,p)%p]=i;
	}
	a=power(a,t,p);
	if(!a){
		if(b==0){
			return 0;
		}
		else return -1;
	}  
	for(long long i=1;i<=t;i++){
		long long val=power(a,i,p);
	    long long j=Hash.find((long long)val);//这一行
		if(j==Hash.end()){
			j = -1;
		}
		else j=Hash[val];
		if(j!=-1&&i*t-j>=0) return i*t-j; 
	}
	return -1;
}
int main(){
	long long b,n,p;
	p=read(),b=read(),n=read();
    long long ans=BSGS(b,n,p);
    if(ans==-1){
    	cout<<"no solution";
	}
	else{
		cout<<ans;
	}
}

BSGS模板这道题,54行CE,错误信息为std::map<long long int, long long int>::iterator {aka std::_Rb_tree_iterator<std::pair<const long long int, long long int> >}

怎么改都不对,求教

2021/9/11 20:11
加载中...