题目网址:
https://www.luogu.com.cn/problem/P3846
分析:
一道bsgs的模板题。
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#define LL long long
const int c=1e6+7;
using namespace std;
int p,b,n;
struct node{
int x,y;
}hash[c];
void ins(int x,int y)
{
int t=x%c;
while (hash[t].x!=0) t=(t+1)%c;
hash[t].x=x;
hash[t].y=y;
}
int find(int x)
{
int t=x%c;
while (hash[t].x!=0)
{
if (hash[t].x==x) return hash[t].y;
t=(t+1)%c;
}
return -1;
}
void bsgs()
{
int block=trunc(sqrt(p));
int x=1;
for (int i=0;i<block;i++)
{
ins((LL)x*n%p,i);
x=(LL)x*b%p;
}
ins((LL)x*n%p,block);
int y=1;
int t;
for (int i=1;i<=block;i++)
{
y=((LL)y*x)%p;
t=find(y);
if (t!=-1)
{
printf("%d",i*block-t);
return;
}
}
printf("no solution");
}
int main()
{
scanf("%d%d%d",&p,&b,&n);
bsgs();
}