给定固定大小的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依赖项,并通过不需要设置和拆卸代码来提高性能(只需直接使用字节数组)。
BTW是否存在任何算法,其中查找余数更快但仅适用于某个除数子集(如素数)? (仅供参考,这用于散列桶,所以如果我可以选择除数的值)答案 0 :(得分:0)
如果divisor
长度超过56位,并且您没有128位整数类型可用,那么您无法在高级别轻松完成此长整数语言。所以你应该使用汇编语言(速度)或GMP(为了便于编码)。
这是否回答了你的问题?或者你对divisor
的大小有限制吗?