有時候數非常大是可以考慮取模,多選擇一些模數提高正確率。取模運算可以理解為乙個雜湊雜湊函式,為了避免雜湊衝突,可以分別模不同的模數,如果每乙個模數都沒有產生雜湊衝突那麼就可以認為兩個數是相同的。
判斷兩個數a,b是否相等,如果膜上10相等,膜上11相等。那麼有a + k*110 = b。(110是10和11的最小公倍數),當取的是1e9+1,……1e9+100。那上面的110變成上面這一串數的最小公倍數。兩個數不相等的概率就很小了。取模數更多,公倍數更大。
int mod[10]
=;int mod[3]
=//ntt模數,據說非常好用
題目**
有可能的雜湊衝突
可能負數絕對值比較大,答案本來是負數的,結果都取模之後正數絕對值更大了
比如-5+2 = -1,如果都對3取模變成了-2+2=0
都對4取模變成了-1+2=1
確實會有這種情況,但是如果對多個模數進行取模還是相等的,那麼這兩個數相等的概率就會非常小,模數個數越多概率越小。
#include
#include
#define ll long long
using
namespace std;
const ll mod =
1e9;
ll qum
(ll a, ll b, ll mod)
return t;
}int
main()
}if(flag) cout <<
"no"
<< endl;
else cout <<
"yes"
<< endl;
}return0;
}
取模運算的理解和應用
軟體開發過程中,總會遇到取餘,取模,取整的計算或者思想,這裡小結一下。取模和取餘,這兩個運算在真整數的時候是乙個概論,在負整數進行除法運算時不同。符號 取整 即求商。符號 取模簡述 商值取模值 5 mod 3 2 5 3 1.66 商取小原則 商 1 5 3 1 2 2 5 mod 3 1 5 3 ...
除法的取模運算
逆元 若,b b1 c 1 則,b1稱為b模c的乘法逆元。在acm中,許多除法取模都要用到求逆元。但是,逆元,為什麼能給我們帶來 a b c a b1 c 當然a b要整除 要知道,取模等式等價變形中,是沒有除法的!而推導式,還是沒有用除法的地方!我們用反證法證明 若b b1 c 1,則 a b c...
大數取模運算
問題分析 1 大數儲存 由於x的位數最大為400位,我們不能用現有的int,long,long long,double等資料型別進行儲存。一般儲存大數的方法是用乙個字串來表示。2 取模運算 模擬手算豎式的方法。用x從高到低的每一位加上前一位餘數 10來對bi進行 最後得到的結果就是x bi的結果。利...