基本概念及證明
Barrett約減是一種高效計算\(r = z \mod q\)的約減方法,它基於一種低成本的求商運算,估算出一個近似於\(q = \lfloor z/p \rfloor\)的值\(\hat{q}\),這樣使得\(z-\hat{q}p=r+np\),其中\(n\)是一個很小的數,因此最終的結果\(r\)可以通過很少次數的減法計算得出。該低成本的求商運算依賴於一個適當選擇的基\(b\)(如\(b = 2^L\), \(L\)根據模數\(p\)來選擇)的冪,並且計算過程中涉及到計算一個與模數相關的量\(\lfloor b^{2k}/p \rfloor\),因此適合對同一個模進行多次約減的運算。
下面是Barrett約減的算法描述
參照算法描述,我們來驗證其正確性,
首先我們要確定\(\hat{q}\)是\(q\)的一個好的估計值,即二者非常接近,也就是能使得最后一步做的減法次數非常少。
即
再設
那么就有\(0 \leq \alpha < 1, 0 \leq \beta < 1\),此外有
由於\(z<b^{2k}\),所以\(\lfloor \frac{z}{b^{k-1}} \rfloor \leq b^{k+1}-1\);又因為\(k = \lfloor \log_b{p}\rfloor + 1\),所以\(p \geq b^{k-1}\),也就是說\(\lfloor \frac{b^{2k}}{q}\rfloor \leq b^{k+1}\),綜合上面兩點,該不等式可轉化為
綜上,可以證明經由算法第一步計算得到的\(\hat{q}\)滿足以下條件
即\(\hat{q}\)的確是\(q\)的一個很好的估計值。
進而,我們可以得到
又\(r = z-qp < p\),所以
上文中我們提到,\(p < b^k\),並且\(b \geq 3\),也就是說\(3p < 3b^k \leq b^{k+1}\),也就是說步驟2中計算的結果就等價於\(r = z-\hat{q}p\mod {b^{k+1}}\),進而能夠得到\(r < 3p(r = r\mod p, p+r\mod p, 2p+ r \mod p)\)這樣一個結論,在這一結論下步驟4的減法操作最多需要兩次。督導這里可能會想,步驟2不是多此一舉嗎,直接計算不行嗎?如果我理解的沒錯,這樣做也是為了簡化計算,假設我們選擇的\(b\)值為\(2^L\)次方,那么對\(b^k\)取模的操作只需要去掉該計算數的高\(L*k\)位即可,同理,步驟一中的\(/b^{k+1}\)的操作也可以直接通過右移\(k+1\)位來實現,那這樣整個約減操作中就不需要進行除法操作,大大提高了計算效率(唯一需要的除法操作為\(\mu = \lfloor b^{2k}/p \rfloor\)可以通過預計算的方式為多次同一模數的模約減服務)。