共翁号
共翁号 > 知识 > 逆元怎么求_1

逆元怎么求_1

原创2025-06-20 12:35:11

求逆元是在模运算中找到一个数x,使得a乘以x模m等于1,即ax≡1(mod m)。以下是几种常见的求逆元的方法:

扩展欧几里得算法

原理:通过求解扩展欧几里得方程ax+by=gcd(a,b),可以得到x和y,其中x即为a模m的逆元。

代码示例(C++):

```cpp

ll exgcd(ll a, ll b, ll &x, ll &y) {

if (b == 0) {

x = 1, y = 0;

return a;

}

ll ret = exgcd(b, a % b, y, x);

ll tmp = x;

x = y;

y = tmp - (a / b) * y;

return ret;

}

ll modReverse(ll a, ll n) {

ll x, y;

ll d = exgcd(a, n, x, y);

return d == 1 ? (x % n + n) % n : -1;

}

```

费马小定理或欧拉定理

原理:如果m是素数,且a与m互质,则a的逆元是a^(m-1) mod m。

代码示例(C++):

```cpp

ll inv(ll a, ll m) {

return a == 1 ? 1 : inv(m % a, m) * (m - m / a) % m;

}

```

快速幂算法

原理:利用幂的二进制展开,通过快速幂算法计算a^(m-2) mod m得到a的逆元。

代码示例(C++):

```cpp

ll powM(ll a, ll b, ll m) {

ll tmp = 1;

while (b > 0) {

if (b & 1) tmp = tmp * a % m;

a = a * a % m;

b >>= 1;

}

return tmp;

}

```

以上方法中,扩展欧几里得算法是最通用的,适用于任何互质的a和m。快速幂算法适用于模数为素数的情况。

请根据具体情况选择合适的方法来求逆元

返回:知识

相关阅读

    最新文章
    猜您喜欢
    热门阅读