首页 > 代码库 > 模n运算
模n运算
注意:只是个人理解,可能有不正确的地方
对于整数a、n,模n运算就是求a除以n的余数
如果a=10,n=3,那么a除以n的商为3,余数为1
C语言等编程语言中常使用%代表求模运算:a%n
10%3=1
英文中也使用mod代表求模运算:a mod n
10 mod 3 = 1
模n运算的加法:
(a+b)%n = (a%n + b%n)%n
模n运算的减法:
(a-b)%n = (a%n - b%n)%n
模n运算的乘法:
(a*b)%n = (a*(b%n))%n = ((a%n)*b)%n = ((a%n)*(b%n))%n
模n运算的乘方:
(a^b)%n = ((a%n)^b)%n
(((a^b)%n)*((a^c)%n))%n = ((((a%n)^b)%n)*(((a%n)^c)%n))%n = ((a%n)^b)*(a%n)^c))%n = ((a%n)^(b+c))%n = (a^(b+c))%n
将模n运算中的加减乘运算抽象化:
如果将上面等式中的%n从等式中略去,然后使用(mod n)方式标在等式后,以表明该计算不是普通的加减乘等运算,是基于模n的运算,则各运算可以写作:
a+b = a+b (mod n)
a-b = a-b (mod n)
a*b = a*b (mod n)
a^b = a^b (mod n)
(a^b)*(a^c) = a^(b+c) (mod n)
这样就得到了基于模n的加减乘运算。
b^(-1)的定义
对于普通乘法,b*b^(-1)=1,那么基于模n的b^(-1)应该满足:
b*b^(-1)=1 (mod n)
由(2*5)%3=1可以看出
2^(-1) = 5 (mod 3)
5^(-1) = 2 (mod 3)
由(2*2)%3=1可以看出
2^(-1) = 2 (mod 3)
可以看出b^(-1)是一系列数,但通常只取<n的值
b^(-1)也称为b关于n的模反元素
由b^(-1)定义,可以得到抽象化的基于模n的除法
a/b = a*(b^(-1)) (mod n)
模n运算