【发布时间】:2013-01-01 02:17:16
【问题描述】:
给定一个 mod b 并找到它的逆,然后做扩展的 GCD。
ax + by = gcd(a,b)
得到 x 和 y 后,如何得到它的倒数?
【问题讨论】:
-
你说“它的”倒数。什么的反面?
标签: cryptography inverse modular
给定一个 mod b 并找到它的逆,然后做扩展的 GCD。
ax + by = gcd(a,b)
得到 x 和 y 后,如何得到它的倒数?
【问题讨论】:
标签: cryptography inverse modular
如果gcd(a,b) != 1,a 没有逆mod b。
否则ax + by = 1,表示ax = 1 (mod b),所以x是a mod b的倒数。
【讨论】:
这样做可以计算 x 与模 m 的倒数:
function inverse(x, m)
a, b, u := 0, m, 1
while x > 0
q, r := divide(b, x)
x, a, b, u := b % x, u, x, a - q * u
if b === 1 return a % m
error("must be coprime")
这里:=是同时赋值运算符,所以右边所有的计算都是先做的,再做所有的赋值。 divide 函数返回 b / x 的商和余数。
【讨论】: