• 浅谈求乘法逆元


    费马小定理

    在模为素数p的情况下,有费马小定理

    (a^{p-1} equiv 1(mod p))

    那么(a^{p-2} equiv a^{-1}(mod p))

    也就是说(a)的逆元为(a^{p-2})

    #define ll long long
    
    ll ksm(ll a, ll b, ll mod) {
    	ll ans = 1;
    	while(b) {
    		if(b & 1) ans = ans * a % mod;
    		a = a * a % mod; b >>= 1;
    	}
    	return ans;
    }
    
    ll work(ll a, ll p) {return ksm(a, p - 2, p);} // 求a在模p意义下的逆元
    

    拓展欧几里得

    给定模数(p),求(a)的逆元相当于求解(ax equiv 1(mod m))

    这个方程可以转化为(ax-my=1)

    然后套用求二元一次方程的方法,用扩展欧几里得算法求得一组(x_0),(y_0)(gcd)

    检查(gcd)是否为(1)

    (gcd)不为(1)则说明逆元不存在

    若为(1),则调整(x_0)([0,m))的范围中即可

    PS:这种算法效率较高,常数较小,时间复杂度为(O(ln n))

    void ex_gcd(ll a, ll b, ll &x, ll &y) {
    	if(b == 0) {
    		x = 1; y = 0;
    		return;
    	}
    	ex_gcd(b, a % b, x, y);
    	ll tmp = x; x = y; y = tmp - (a / b) * y;
    }
    
    ll work(ll a, ll p) {
    	ll x, y;
    	ex_gcd(a, p, x, y);
    	return (x % p + p) % p;
    }
    
  • 相关阅读:
    LR12_IE11报错,闪退
    loadrunner11无法启动IE9
    启动数据库失败
    测试代码
    python中的JSON(1)
    文件和异常(二)
    文件和异常(一)
    类(三)
    类(二)
    初识类(一)
  • 原文地址:https://www.cnblogs.com/aurorapolaris/p/13489571.html
Copyright © 2020-2023  润新知