模乘逆元

给定两个整数 AM,让我们找到 A 在模 M 下的模乘逆元。

模乘逆元是指一个整数 X,满足:

> A X ≡ 1 (mod M)

Try it on GfG Practice<img src="https://www.geeksforgeeks.org/problems/modular-multiplicative-inverse-1587115620/1" alt="redirect icon" />
注意: X 的值应该在范围 {1, 2, … M-1} 内,即在整数模 M 的范围内。(请注意 X 不能为 0,因为 A*0 mod M 永远不会是 1)。当且仅当 A 和 M 互质(即 gcd(A, M) = 1)时,“A modulo M”的乘法逆元才存在。
示例:

> 输入: A = 3, M = 11

> 输出: 4

> 解释: 因为 (4*3) mod 11 = 1,所以 4 是 3(在 11 下)的模逆元。

> 有人可能会认为 15 也是一个有效的输出,因为 "(15*3) mod 11" 也是 1,但 15 不在范围 {1, 2, … 10} 内,因此是无效的。

>

> 输入: A = 10, M = 17

> 输出: 12

> 解释: 因为 (10*12) mod 17 = 1,所以 12 是 10(在 17 下)的模逆元。

朴素方法: 为了解决这个问题,我们可以遵循以下思路:

> 一个朴素的方法是尝试从 1 到 m 的所有数字。对于每一个数字 x,检查 是否等于 1。

下面是上述方法的实现:

C++


CODEBLOCK_9811bc25

Java


CODEBLOCK_8380ec1e

Python


CODEBLOCK_b48b70bd

C#


CODEBLOCK_d085a979

JavaScript


CODEBLOCK_0a52d031

PHP


CODEBLOCK_0de437ca

Output

4

时间复杂度: O(M)
辅助空间: O(1)

> 我们可以使用扩展欧几里得算法,该算法接受两个整数 ‘a‘ 和 ‘b‘,然后找到它们的 gcd,并且也能找到满足下式的 ‘x‘‘y‘

>

> ax + by = gcd(

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/43717.html
点赞
0.00 平均评分 (0% 分数) - 0