具有unsigned int的字节数组的剩余算法

时间:2014-08-01 21:37:29

标签: c++ algorithm optimization hashtable division

给定固定大小的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是否存在任何算法,其中查找余数更快但仅适用于某个除数子集(如素数)? (仅供参考,这用于散列桶,所以如果我可以选择除数的值)

1 个答案:

答案 0 :(得分:0)

如果divisor长度超过56位,并且您没有128位整数类型可用,那么您无法在高级别轻松完成此长整数语言。所以你应该使用汇编语言(速度)或GMP(为了便于编码)。

这是否回答了你的问题?或者你对divisor的大小有限制吗?