模運算

轉載地址http://www.cnblogs.com/jojoke/articles/1003594.html

模運算

很多地方用到模運算,這裏說明模運算的一些規律,並加以證明。 後續會對這些理論實際的應用加以記錄和說明。

1. 模運算是取餘運算(記做 % 或者 mod),具有週期性的特點。 m%n的意思是n除m後的餘數, 當m遞增時m%n呈現週期性特點, 並且n越大,週期越長,週期等於n。 
    例如
       0 % 20 = 0,1 % 20 = 1, 2 % 20 = 2, 3 % 20 = 3, ..., 19 % 20 = 19
      20 % 20 = 0,21 % 20 = 1,22 % 20 = 2,23 % 20 = 3, ...,39 % 20 = 19
2. 如果 m % n = r,那麼可以推出如下等式
    m = k * n + r (k爲大於等於0的整數, r <= m)
3. 同餘式, 表示正整數a,b對n取模,它們的餘數相同,記做 a ≡ b mod n或者a = b (mod n)。
   根據2的等式可以推出 a = kn + b 或者 a - b = kn
   證明:  ∵ a = k1 * n + r1
             b = k2 * n + r2
          ∴ a - b = (k1 - k2) * n + (r1 - r2)
             a = k * n + (r1 - r2) + b
          ∵ a, b對n取模同餘,r1 = r2
          ∴ a = k * n + b (k = k1 - k2)
4. 模運算規則, 模運算與基本四則運算有些相似,但是除法例外。其規則如下
   (a + b) % n = (a % n + b % n) % n            (1)
   (a - b) % n = (a % n - b % n) % n            (2) 
   (a * b) % n = (a % n * b % n) % n            (3)
    ab % n = ((a % n)b) % n                      (4)

(1)式證明
∵ a = k1*n + r1

   b = k2*n + r2

  a % n = r1

  b % n = r2

∴(a+b) % n = ((k1+k2)*n + (r1+r2)) % n = (r1+r2) % n = (a % n + b % n)% n
    得證
(2)式證明同上
(3)式證明
     a = k1*n + r1
     b = k2*n + r2
     (a*b) % n = (k1k2n2 + (k1r2+k2r1)n + r1r2) % n = r1r2 % n = (a %n * b %n ) % n
 (4)式證明
      設 a % n = r
      ab %n= (a * a * a * a…*a) %n = (a %n * a %n * a %n * … * a %n) %n = rb % n = ((a % n) b) % n
 
模運算看起來不是很直觀,但是可以用來推導出一些有用的東西。 例如(4)式可以用來降冪運算,例如計算6265 % 133,直接計算的話需要算出6265 利用(4)式可以進行降冪運算。
  6265 % 133
  = 62 * 6264 % 133
  = 62 * (622)32 % 133
  = 62 * 384432 % 133
  = 62 * (3844 % 133)32 % 133
  = 62 * 12032 % 133

  = 62 * 3616 % 133
  = 62 * 998 % 133
  = 62 * 924 % 133
  = 62 * 852 % 133
  = 62 * 43 % 133
  = 2666 % 133
  = 6


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章