zoukankan      html  css  js  c++  java
  • BSGS 大步小步算法

    BZOJ 3239

    //Twenty
    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<queue>
    #include<vector>
    #include<map>
    const int maxn=1e6; 
    using namespace std;
    typedef long long LL;
    map<LL,int>s;
    LL ny,mm,a,b,p,now=1;
    LL ksm(LL a,int b,LL mod){
        LL base=a,res=1;
        while(b){
            if(b&1) (res*=base)%=mod;
            (base*=base)%=mod;
            b>>=1;
        }
        return res;
    }
    int main()
    { 
        while(scanf("%lld%lld%lld",&p,&a,&b)==3)
        {
        s.clear();
        mm=sqrt(p); now=1;
        a%=p; b%=p;
        if(b==1) printf("0
    ");
        else if(a==b) printf("1
    "); 
        else{
        for(int i=1;i<=mm;i++){
            now*=a;
            now%=p;
            if(!s[now]) s[now]=i; 
        }
        if(s.count(b)) 
            printf("%d
    ",s[b]);
        else{
            int ans=-1; 
            ny=ksm(ksm(a,mm,p),p-2,p);
            for(int i=2;i<=mm;i++)
            {
                b*=ny; b%=p;
                if(s.count(b)) {ans=(i-1)*mm+s[b]; break; }
            }
            if(ans==-1) printf("no solution
    ");  
            else printf("%d
    ",ans); 
        }
        }
        }
        return 0;
    }
    BSGS
  • 相关阅读:
    构造函数和析构函数
    关联[2]
    关联模型[1]
    auth 权限控制
    多语言设置
    文件上传
    验证码
    图像处理
    Session 与 Cookie
    控制器[3]
  • 原文地址:https://www.cnblogs.com/Achenchen/p/7474617.html
Copyright © 2011-2022 走看看