在 Python 中计算模乘逆
如果我们有两个数字 a
和 m
,则 a
的模乘法逆元是模 m
下的 x
,如果:
a * x % m = 1
在这种情况下,乘法逆只在 a
和 m
互质时才存在,即如果 a
和 m
的最大公约数是 1
。
x
的值可以从 1
到 m-1
。
使用朴素迭代方法的模乘逆
假设我们需要在模 m
下找到 a
的乘法倒数。如果模乘逆存在,它的值可以从 1
到 m-1
。因此,我们遍历这个范围并检查模乘逆的条件。如果范围内的任何数字满足条件,我们将数字作为模乘逆。
def find_mod_inv(a, m):
for x in range(1, m):
if (a % m) * (x % m) % m == 1:
return x
raise Exception("The modular inverse does not exist.")
a = 13
m = 22
try:
res = find_mod_inv(a, m)
print("The required modular inverse is: " + str(res))
except:
print("The modular inverse does not exist.")
输出:
The required modular inverse is: 17
在这里,我们有一个名为 find_mod_inv
的函数,它以 a
和 m
作为输入并返回模数 m
下 a
的乘法逆。
如果数字 a
在模 m
下没有 a
的乘法倒数,它将引发和 Exception
。
从上面的例子中,我们可以看到在模 22
下 13
的模乘逆是 17
。
使用 pow()
内置函数的模乘逆
我们还可以使用 Python 的内置函数 pow()
来计算一个数的模乘法逆。
a = 38
m = 97
res = pow(a, m - 2, m)
print("The required modular inverse is: " + str(res))
输出:
The required modular inverse is: 23
要使用 pow()
方法计算模乘法逆,pow()
方法的第一个参数将是要找到模逆的数字,第二个参数将是模减去 2
,最后一个参数将是模数的顺序。
但是,对于 Python 3.8
及更高版本,我们可以将第二个参数替换为 -1
。
a = 38
m = 97
res = pow(a, -1, m)
print("The required modular inverse is: " + str(res))
输出
The required modular inverse is: 23
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串