簡體   English   中英

無符號int字節數組的余數算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM