Barrett約減


基本概念及證明

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\)的一個好的估計值,即二者非常接近,也就是能使得最后一步做的減法次數非常少。

\[\lfloor \lfloor z/b^{k-1} \rfloor\cdot \mu /b^{k+1}\rfloor = \lfloor \lfloor \frac{z}{b^{k-1}}\rfloor \cdot \lfloor \frac{b^{2k}}{p}\rfloor \cdot \frac{1}{b^{k+1}} \rfloor \leq \lfloor \frac{z}{b^{k-1}} \cdot \frac{b^{2k}}{p} \cdot \frac{1}{b^{k+1}} \rfloor = \lfloor\frac{z}{p} \rfloor \]

\[\hat{q} \leq q \]

再設

\[\alpha = \frac{z}{b^{k-1}} - \lfloor \frac{z}{b^{k-1}} \rfloor \\ \beta = \frac{b^{2k}}{p} - \lfloor \frac{b^{2k}}{p} \rfloor \]

那么就有\(0 \leq \alpha < 1, 0 \leq \beta < 1\),此外有

\[q = \lfloor \frac{z}{b^{k-1}} \cdot \frac{b^{2k}}{q} \cdot \frac{1}{b^{k+1}}\rfloor =\lfloor \frac{(\lfloor\frac{z}{b^{k-1}}\rfloor + \alpha)(\lfloor\frac{b^{2k}}{p}\rfloor + \beta)}{b^{k+1}}\rfloor \leq \lfloor\hat{q} + \frac{\lfloor\frac{z}{b^{k-1}}\rfloor+\lfloor\frac{b^{2k}}{p}\rfloor+1}{b^{k+1}}\rfloor \]

由於\(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}\),綜合上面兩點,該不等式可轉化為

\[q \leq \lfloor \hat{q} + \frac{b^{k+1}-1+b^{k+1}+1}{b^{k+1}}\rfloor = \lfloor \hat{q} + 2 \rfloor \]

綜上,可以證明經由算法第一步計算得到的\(\hat{q}\)滿足以下條件

\[q-2 \leq \hat{q} \leq q \]

\(\hat{q}\)的確是\(q\)的一個很好的估計值。

進而,我們可以得到

\[0 < z - \hat{q}p \leq z - (q-2)p \]

\(r = z-qp < p\),所以

\[z-\hat{q}p < 3p \]

上文中我們提到,\(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\)可以通過預計算的方式為多次同一模數的模約減服務)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM