數論演算法 等模

2022-07-12 16:30:25 字數 896 閱讀 6698

在雜湊函式中,有很多地方是根據模運算來進行雜湊,所以某兩個整數都modn的值一樣,這兩個整數就可以看成是乙個等價類的(比如某個簡單的hash演算法是槽值為模7的餘數,那麼模7餘數相等的數就都是乙個等價類的,都會被hash到同乙個槽中)。

還比如:a,b∈z,當且僅當a和b除以2的餘數相同.這樣所有的偶數都屬於同乙個等價類。(因為所有偶數除以2的餘數為0)

這種關係用符號可以表示為:

a≡b(mod)n或a∈[b]n

表示a,b除以n的餘數相等

我們經常需要面臨的乙個問題是:知道了整數a,正整數n。現在想知道a模n的等價類集合是什麼?

乙個的等價類是乙個集合,比如a=3,n=7.我們可以找到3模7的等價類集合為。

同理,根據這個等價類集合我們可以看出:-4模7的等價類集合也是這個集合。10模7的等價類集合也是這個集合······

我們一般用「每個等價類集合中最小的非負元素來表示該等價類集合」,即

可以表示為[3]7

當然,這個「最小的非負元素」的規定也不是必須的,事實上這個集合同時也可以表示為[-4]7或[10]7······

即:······=[-4]7=[3]7=[10]7=······=

在我們已知a和n的前提下,其實就可以根據以下公式找到a模n的等價類集合。該公式為:

[a]n = k∈z (這個公式可以很簡單的推出,在此就不詳講了)

我們可以將這些等價類集合「再歸納成乙個集合」,用「每個等價類集合中最小的非負元素來表示該等價類集合」即:

zn = = 0<=a<=n-1

我們可以已z7為例:

z7=,所以這個集合裡絕對不會有[10]7或[17]7等,因為[3]7已經代表了他的等價類集合了。

為了方便起見,我們可將zn簡化為:

zn= (在這裡面,0就表示[0]n······)

數論之組合數取模

組合數取模 cm n p 三個鏈結表示的是該種方法的定理定義之類的 怕三種方法合在一起太長 一 楊輝三角打表求組合數 1 m n 1000,1 p 109 int combination int n return 0 二 乘法逆元來直接求組合數 n,m不大於10 5 其中三種求逆元方法及模板請戳藍 ...

數論 spfa演算法 bzoj 2118 墨墨的等式

time limit 10 sec memory limit 259 mb submit 1283 solved 496 墨墨突然對等式很感興趣,他正在研究a1x1 a2y2 anxn b存在非負整數解的條件,他要求你編寫乙個程式,給定n 以及b的取值範圍,求出有多少b可以使等式存在非負整數解。輸入...

bzoj 2956 模積和 數論

求 n mod i m mod j 其中1 i n,1 j m,i j。第一行兩個數n,m。乙個整數表示答案mod 19940417的值 3 41 樣例說明 答案為 3 mod 1 4 mod 2 3 mod 1 4 mod 3 3 mod 1 4 mod 4 3 mod 2 4 mod 1 3 m...