[ BSGS ] BZOJ3239

来源:互联网 发布:爱淘宝买东西如何返利 编辑:程序博客网 时间:2024/06/15 17:23

裸题

#include<bits/stdc++.h>using namespace std;map<int,int>M;int b,n,p,s,S,t,tmp,T;bool f;int main(){    while(scanf("%d%d%d",&p,&b,&n)!=EOF){        s=ceil(sqrt(p));        M.clear();t=n;        for(int i=0;i<=s;i++,t=1ll*t*b%p)M[t]=i;        t=1;        for(int i=0;i<s;i++)t=1ll*t*b%p;        f=0;        for(int i=1,j=t;i<=s;i++,j=1ll*j*t%p)        if(M.count(j)){            printf("%d\n",i*s-M[j]);            f=1;            break;        }        if(!f)printf("no solution\n");    }    return 0;}
原创粉丝点击