模运算

157 阅读1分钟

如果让你计算1234⋅6789 的个位数,你会如何计算?

由于只有个位数会影响到乘积的个位数,那么4⋅9=36的个位数 666 就是答案。

对于1234+6789的个位数,同理,4+9=13 的个位数 333 就是答案。

你能把这个结论抽象成数学等式吗?

一般地,涉及到取模的题目,通常会用到如下等式(上面计算的是m=10):

(a+b) mod m=((a mod m)+(b mod m)) mod m

(a⋅b) mod m=((a mod m)⋅(b mod m)) mod m

证明:根据带余除法,任意整数 aaa 都可以表示为a=km+r,这里 r 相当于 a mod m。那么设a=k1m+r1,b=k2m+r2。 第一个等式:

(a+b)modm

=((k1+k2)m+r1+r2) mod m

=(r1+r2) mod m ((a mod m) + (b mod m)) mod m

第二个等式:

(a·b) mod m

= (k1k2m² +(k1r2 + k2r1)m + r1r2) mod m

= (r1r2) mod m

= ((a mod m) · (b mod m)) mod m

根据这两个恒等式,可以随意地对代码中的加法和乘法的结果取模