寻求GMP二进制搜索:如何使用memcmp比较两个GMP mpz_t?

时间:2012-10-26 03:35:29

标签: c++ gmp bsearch

动机:我想使用bsearch(二分搜索)快速搜索121位非负整数的排序列表(它们都有正好121位,尽管它们可能有前导零)。这些整数太大而无法存储为单独的int,依此类推,所以我打算将它们mpz_t(使用GMP)。

通过手册,GMP没有bsearch等价物(但如果我错了,请纠正我),这导致我:

  

问题:我们可以使用memcmp或类似的东西来比较存储为mpz_t的相同位数的两个非负整数吗?如果是这样,那么正确的语法是什么?

如果可以,搜索应该非常有效。

我也对(a)存储这些允许在C ++中快速搜索的121位整数的数据结构持开放态度,(b)搜索不使用{{1}的整数的方法。 }。

1 个答案:

答案 0 :(得分:2)

如果它们只有121位整数,为什么不使用原生的128位整数扩展:http://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html?这应该快得多,因为你可以避免像memcpy那样“昂贵”的操作,你所有的比较都应该是一条指令。