繁体   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