模运算

(零零碎碎的东西,记得很乱)
分配率:
(a×b) mod c=(a mod c * b mod c) mod c
(a+b) mod c=(a mod c+ b mod c) mod c
(a-b) mod c=(a mod c- b mod c) mod c
很好记,就是先模仿四则运算的分配率分配一次,然后再取余一次。

为什么两个数的余数相加后要再取余一次呢?因为余数是小于商的,但是两个余数相加之后却不一定小于商,所以要再取余一次。

那为什么两个数数余数相加后再取余,等于这两个数相加之和的余数呢?
证明(以加法举例):(a+b) mod c=(a mod c+ b mod c) mod c
令 a mod c = ma, b mod c = mb。
则 a=ma+cka,b=mb+ckb。(ka,kb为正整数)
a+b = (ma+cka + mb+ckb)
a+b = (ma+mb) + c*(ka+kb)
所以
(a+b) mod c = ( (ma+mb) + c*(ka+kb) ) mod c
(a+b) mod c = (ma+mb) mod c
又 a mod c = ma, b mod c = mb。
所以 (a+b) mod c=(a mod c+ b mod c) mod c


(a+k*c) mod c = a mod c 的证明,参考百度百科 同余定理。注意其中 a|b 代表 b mod a ==0(或者等价的 b/a得整数)



注意 a mod c + b mod c = (a+b) mod c 是错的
比如说 10 mod 4 = 2, 6 mod 4 = 2,它们2小于4,可以当余数,但是 (10+6) mod 4 =0 ,显然是错的。
由这个例子,也可以反推分配律。

(a^2)mod c = (a mod c)^2 mod c
a^n mod c = (a mod c) ^n mod c

猜你喜欢

转载自blog.csdn.net/wx_assa/article/details/104519440