zoukankan      html  css  js  c++  java
  • BSGS模板

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #define mod 600000
     6 using namespace std;
     7 int cnt;
     8 long long a,b,c;
     9 int head[600005];
    10 struct Edge{
    11     int fr;
    12     int val;
    13     int nxt;
    14     long long to;
    15 }edge[600005];
    16 void addedge(int u,long long v,int w){
    17     edge[cnt].fr=u;
    18     edge[cnt].to=v;
    19     edge[cnt].val=w;
    20     edge[cnt].nxt=head[u];
    21     head[u]=cnt++;
    22 }
    23 void init(){
    24     cnt=0;
    25     memset(head,-1,sizeof(head));
    26 }
    27 long long BSGS(long long A,long long B,long long C){
    28     init();
    29     int m=sqrt(C);
    30     long long mul1=1;
    31     long long mul2=1;
    32     for(int i=1;i<=m;i++){
    33         mul1=(mul1*A)%C;
    34         long long ad=(mul1*B)%C;
    35         if(!ad)return -1;
    36         addedge(ad%mod,ad,i);
    37     }
    38     for(int i=1;i<=m+3;i++){
    39         mul2=(mul2*mul1)%C;
    40         for(int j=head[mul2%mod];j!=-1;j=edge[j].nxt){
    41             long long v=edge[j].to;
    42             if(v==mul2)return 1ll*i*m-edge[j].val;
    43         }
    44     }
    45     return -1;
    46 }
    47 int main(){
    48     scanf("%lld%lld%lld",&c,&a,&b);
    49     long long ans=BSGS(a,b,c);
    50     if(ans==-1)printf("no solution
    ");
    51     else printf("%lld
    ",ans);
    52     return 0;
    53 }
  • 相关阅读:
    0916 编程实验一 词法分析程序 总结
    0916 编程实验一 词法分析程序
    0909编译
    C语言文法
    词法分析编译感想
    词法分析
    0909 编译原理
    0429团队3.0
    0428 团队项目合作2.0作业
    0422 数学口袋精灵app
  • 原文地址:https://www.cnblogs.com/lnxcj/p/10220309.html
Copyright © 2011-2022 走看看