zoukankan      html  css  js  c++  java
  • 高次同余方程求解

    ll exgcd(ll a,ll b,ll &x,ll &y)
    {
        if(!b)
        {
            x = (ll)1,y = (ll)0;
            return a;
        }
        ll r = exgcd(b,a%b,x,y);
        ll t = x;
        x = y;
        y = t - a/b*y;
        return r;
    }
    
    //计算模n下a的逆,如果不存在逆,返回-1
    ll inv(ll a,ll n)
    {
        ll d,x,y;
        d = exgcd(a,n,x,y);
        return d == 1 ? (x+n)%n : -1;
    }
    
    ll mul_mod(ll a,ll b,ll n)
    {
        return a*b%n;
    }
    
    ll pow_mod(ll a,ll p,ll n)
    {
        if(p == 0)
            return 1;
        ll ans = pow_mod(a,p/2,n);
        ans = ans*ans%n;
        if(p%2)
            ans = ans*a%n;
        return ans;
    }
    
    //求解模方程 a^x = b(mod n), n为素数,无解返回-1
    ll log_mod(ll a,ll b,ll n)
    {
        ll m,v,e = 1LL,i;
        m = (ll)sqrt(n+0.5);
        v = inv(pow_mod(a,m,n),n);
        map<ll,ll> x;
        x[1] = 0;
        for(i=1;i<m;i++)  //计算e[i]
        {
            e = mul_mod(e,a,n);
            if(!x.count(e))
                x[e] = i;
        }
        for(i=0;i<m;i++)   //考虑a^(im), a^(im+1), ... , a^(im+m-1)
        {
            if(x.count(b))
                return i*m+x[b];
            b = mul_mod(b,v,n);
        }
        return -1;
    }
  • 相关阅读:
    2021年2月22
    2021年2月21
    2021年2月20
    2021年2月19
    动态添加titie属性
    根据内容改变文字颜色!
    自定义弹出层!
    来回切换图标以及文字
    20180831xlVBA_WorksheetsCosolidate
    20180830xlVBA_合并计算
  • 原文地址:https://www.cnblogs.com/whatbeg/p/3813828.html
Copyright © 2011-2022 走看看