密碼學 模運算

2020-07-28 16:06 更新

取模運算(“Modulus Operation”)

它和取余運算(“Remainder Operation ”)兩個概念有重疊的部分但又不完全一致。主要的區(qū)別在于對負整數(shù)進行除法運算時操作不同。取模主要是用于計算機術(shù)語中。取余則更多是數(shù)學概念。 模運算在數(shù)論和程序設(shè)計中都有著廣泛的應用,奇偶數(shù)的判別到素數(shù)的判別,從模冪運算到最大公約數(shù)的求法,從孫子問題到凱撒密碼問題,無不充斥著模運算的身影。雖然很多數(shù)論教材上對模運算都有一定的介紹,但多數(shù)都是以純理論為主,對于模運算在程序設(shè)計中的應用涉及不多。

“?!笔侵敢粋€計量系統(tǒng)的計數(shù)范圍;如時鐘,12個整點為計算范圍,則模為12;計算機也是一個計量機器,模為32位或者64位;

32位計算機正常理解 在模 范圍內(nèi)能表達的 有 [0, 232-1];那么負數(shù)該怎么表達呢,所以出現(xiàn)了補碼;也就是 正數(shù) + 負數(shù) 正好達到模的溢出閥值232;所以在計算機中負數(shù)是用補碼方式表達的原因;

關(guān)于補碼的例子:在12模的時鐘中;假設(shè)當前時針指向10點,而準確時間是6點,調(diào)整時間可有以下兩種撥法

  • 倒撥4小時,即:10-4=6 (10-4) mod 12 = 6
  • 順撥8小時:10+8=12+6=6 (10+8)mod 12 = 6

在以12模的系統(tǒng)中,加8和減4效果是一樣的;因此凡是減4運算,都可以用加8來代替。對“?!倍?,8和4互為補數(shù)。實際上以12模的系統(tǒng)中11和1、10和2、9和3、7和5、6和6都有這個特性;共同的特點是兩者相加等于模

“取?!睂嵸|(zhì)上是計量器產(chǎn)生“溢出”的量,它的值在計量器上表示不出來,計量器上只能表示出模的余數(shù)(取模);任何有模的計量器,均可化為加減法運算

5 mod 3 = 2 例子中;模 為 3;2 為取模的值

取模和取余的區(qū)別

1.相同

假設(shè)有整數(shù)a和b,那么取模/取余運算可以分為兩步運算:

求整數(shù)商:c = a/b; 計算模/余數(shù):2.計算?;蛘哂鄶?shù): r = a - c*b.

2.不同

取余運算 在計算商值時 商值向0方向舍入;靠近0原則 取模運算 在計算商值時 商值向負無窮方向舍入;盡可能讓商值小的原則(不超多商值的最大值)

求模運算和求余運算在第一步不同: 取余運算在取c的值時,向0 方向舍入(fix()函數(shù));而取模運算在計算c的值時,向負無窮方向舍入(floor()函數(shù))。

例子

取模

簡述 商值 取模值
5 mod 3 = 2 5/3 = 1.66商取小原則 商=1 5 - 3 * 1 = 2 2
-5 mod 3 = 1 -5/3 = -1.66 商取小原則 商=-2 -5 - (3 * -2) = 1 1
5 mod -3 = -1 5/-3 = -1.66 商取小原則 商=-2 5 - (-3 * -2) = -1 -1
-5 mod -3 = -2 -5/-3 = 1.66 商取小原則 商=1 -5 - (-3 * 1) = 2 -2

取余

簡述 商值 取余值
5 rem 3 = 2 5/3 = 1.66 商靠0原則 商=1 5 - 3 * 1 = 2  2
-5 rem 3 = -2 -5/3 = -1.66 商靠0原則 商=-1 -5 - (3 * -1) = - 2 -2
5 rem -3 = 2 5/-3 = -1.66 商靠0原則 商=-1 5 - (-3 * -1) = 2 2
-5 rem -3 = -2 - 5/-3 = 1.66 商靠0原則 商=1 -5 - (-3 * 1) = - 2 -2

java 中 % 是取余運算;Python中 % 是取模運算

Python代碼

## 取模,Python中可直接用%,計算模,r = a % b
def mod(a, b):
    c = a // b
    r = a - c * b
    return r


## 取余
def rem(a, b):
    c = int(a / b)
    r = a - c * b
    return r
x=mod(-5,3)
y=rem(-5,3)
print(x,y)

輸出結(jié)果 1 -2

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號