zoukankan      html  css  js  c++  java
  • BSGS算法总结

    BSGS算法专用于求   a^x=b mod p

    只有当 a,p互质时才能求出解,主要思想是

    我把x=i*t-j    ,    t=sqrt(p)    ,那么j的范围就是  [0,t-1]      ->    a^(i*t-j) = b mod p   

    ->   a^(i*t)   =   b*(a^j)   mod p

    我们把j=[0,t-1] 都插入到 hash表内,然后

    i的范围   [0,t]   算出值 看hash表内是否存在,如果存在,那么说明有解

    ll bsgs(ll a,ll b,ll p){
        map<ll,ll> hash;
        hash.clear();
        b%=p;
        ll t=(ll)sqrt(p)+1;
        for(int j=0;j<t;j++){
            ll val = (ll)b*power(a,j,p)%p;
            hash[val]=j;
        }
        a=power(a,t,p);
        if(a==0) return b==0?1:-1;
        for(int i=0;i<=t;i++){
            ll val = power(a,i,p);
            ll j=hash.find(val)==hash.end()?-1:hash[val];
            if(j>=0&&i*t-j>=0) return i*t-j; 
        } 
        return -1;
    }
  • 相关阅读:
    数据类型
    一些骚操作
    re
    多任务
    监听按钮点击事件
    监听按钮点击事件
    监听按钮点击事件
    将博客搬至博客园
    将博客搬至博客园
    将博客搬至博客园
  • 原文地址:https://www.cnblogs.com/Lis-/p/11290566.html
Copyright © 2011-2022 走看看