從標量場元素中減去模數和減少模數有什麼區別?
在實現 Field 元素時,我們定義了對資料結構的必要操作。
我看到的一個功能是“標量減少”功能,它有效地減少了隨機標量,使其位於標量場中。
這和從這個數字中減去模數有什麼區別?
例子:
令 a 為隨機選擇的標量 令 q 為模數
我已經看到執行以下操作的程式碼:
if a > q{ a = q-a }
為什麼它不嘗試通過模數來減少 a?
我們有許多密碼學的數學運算$$ \neg, \ll, \gg , \oplus, + , \times, /, \operatorname{mod}, \operatorname{div}, \operatorname{exponential},\ldots $$而這樣的例子不勝列舉。眾所周知,時間就是金錢,所有的操作都有一定的成本。我們的目標是盡可能降低成本。
例如,我們更喜歡左移而不是乘以 2 的冪
$$ n \cdot 2^k = n \ll k $$
或右移到除以二的冪
$$ n / 2^k = n \gg k $$
或按位和運算符的組合 ( $ \wedge $ ) 和 2 的冪減 1 到餘數
$$ n \mod 2^k = n \wedge (2^k-1). $$
乘法和除法的成本降低為移位運算的成本和余數的成本為 $ \wedge $ (模數 $ 2^k $ 相當於採取 $ k $ 最低有效位)。
在你的問題中,你寫了
if a > q{ a = q-a }
這應該是
if a >= q{ a = a-q }
正如@fgrieu 在評論中所指出的那樣,通過減法進行模組化減少。
在你的情況下,我們有一個素數 $ q $ 我們正在嘗試取模數。計算期間的一種方法是在最後減少模數。但是,這可能會增加操作數的大小,這將導致更大的操作成本。
我從您的程式碼中可以看出,他們通過減法來減少數字 $ q $ . 假設結果 $ r = a-q $ 總是在$$ 0 \leq r < q $$那麼我們可以說$$ q\leq a<2q, $$看到這個減法 $ q $ 從上面的等式;
$$ q-q \leq a-q <2q-q $$並得到
$$ 0 \leq a-q=r <q. $$