[英]Remainder algorithm of byte array with unsigned int
給定C ++(模板函數)中固定大小的字節數組和無符號整數,我如何計算余數(通常為整數的%運算符)。
這是我目前使用GMP的方式:
template <typename HashType>
uint64_t remainder(const HashType& value, const uint64_t divisor)
{
mpz_t integ;
mpz_init(integ);
mpz_import(integ, value.size(), 1, 1, 1, 0, value.data());
uint64_t remainder = mpz_fdiv_ui(integ, divisor);
mpz_clear(integ);
return remainder;
}
最好刪除GMP依賴項,並通過不需要該設置和拆卸代碼(直接使用字節數組)來提高性能。
順便說一句,有沒有一種算法可以更快地找到余數,但僅對某些除數子集(例如質數)有效? (僅供參考,這用於哈希存儲桶,因此,如果我可以選擇除數的值)
如果divisor
可以超過56位長,並且您沒有可用的128位整數類型,那么您就無法使用高級語言輕松進行這種長除法。 因此,您可能應該使用匯編語言(為了提高速度)或GMP(為了便於編碼)。
這回答了你的問題了嗎? 還是對divisor
的大小有限制?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.