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

    模板最主要的是自己看得舒服,不会给自己留隐患,调起来比较简单,板子有得是,最主要的是改造出适合你的那一套。                  ——mzz

    #include<bits/stdc++.h>
    #define int long long 
    using namespace std;
    const int mod=13331;
    struct Hash_Tablet{
        int val,nex,id;
    }edge[mod<<2];int first[mod<<2],num;
    int a,b,c,ans;
    void init(){
        memset(first,0,sizeof(first));
        num=0;
    }
    void insert(int val,int j){
        int Hval=val%mod;
        edge[++num].val=val;
        edge[num].id=j;
        edge[num].nex=first[Hval];
        first[Hval]=num;
    }
    int find(int val){
        int Hval=val%mod;
        for(int i=first[Hval];i;i=edge[i].nex)
            if(edge[i].val==val)
                return edge[i].id;
        return -1;
    }
    int Bsgs(int a,int b,int c){
        init();
        if(b==1) return 0;
        int m=ceil(sqrt(c*1.0));
        int j,p=1,x=1;
        for(int i=0;i<m;i++,p=p*a%c)
            insert(p*b%c,i);
        for(int i=m;i<=c+m;i+=m){
            if((j=find(x=x*p%c))!=-1)
                return i-j;
        }return -1;
    }
    signed main(){
        while(~scanf("%lld%lld%lld",&c,&a,&b)){
            ans=Bsgs(a%c,b%c,c);
            ans==-1?puts("no solution"):printf("%lld
    ",ans);
        }return 0;
    }
    View Code

    以一道叫Discrete Logging的题为例。

  • 相关阅读:
    使用RPC的接口创建账户同时购买内存并为其抵押CPU和NET资源
    使用RPC的接口创建账户
    【移动安全基础篇】——21、Android脱壳思路
    插件
    NGUI 优化
    影子
    优化文章索引
    MVC
    《你不常用的c#之XX》
    CMake
  • 原文地址:https://www.cnblogs.com/Yu-shi/p/11235540.html
Copyright © 2011-2022 走看看