蒟蒻求助
查看原帖
蒟蒻求助
182229
songyuan888楼主2021/7/18 10:26

RT

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int h[76543],he[76543],n[76543],d[76543],t;
void insert(int x,int y)
{
	int k;
	k=x%76543;
	h[t]=x;
	d[t]=y;
	n[t]=he[k];
	he[k]=t++;
}
int find(int x)
{
	int k,i;
	k=x%76543;
	for(i=he[k];i!=-1;i=n[i])
		if(h[i]==x)
			return d[i];
	return -1;
}
int bsgs(int a,int b,int c)
{
	long long x,p,e;
	int m,j,i;
	memset(he,-1,sizeof(he));
	t=1;
	if(b==1)
		return 0;
	m=sqrt(c*1.0);
	x=1;
	p=1;
	for(i=0;i<m;i++,p=p*a%c)
		insert(p*b%c,i);
	for(e=m;;e+=m)
	{
		if(j=find(x=x*p%c)!=-1)
			return e=j;
		if(i>c)
			break;
	}
	return -1;
}
int main()
{
	int i,a,b,c;
	for(i=1;;i++)
	{
		cin>>a>>b>>c;
		if(a==0&&b==0&&c==0)
			break;
		else
		{
			a=a%c;
			b=b%c;
			if(bsgs(a,b,c)==-1)
				cout<<"No Solution"<<endl;
			else
				cout<<bsgs(a,b,c)<<endl;
		}
	}
	return 0;
}
/*
5 58 33
2 4 3
0 0 0
*/

请奆佬看看哪里错了

2021/7/18 10:26
加载中...