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