GMP库中有没有函数可以给我任何GMP变量的bitLength?
mpz_t temp;
mpz_init(temp);
mpz_set_ui(temp,356678789);那么如何找到temp的位长呢?
发布于 2012-08-01 18:45:49
也许有一个更好的方法,但在阅读了the docs之后,我想到了这个方法:
mp_bitcnt_t msb(mpz_t& m) {
mpz_t n = m.get_moz_t();
mp_bitcnt_t remaining = mpz_popcount(n), last = -1;
while (remaining) {
--remaining;
last = mpz_scan1(n, last + 1);
}
return last;
}发布于 2012-08-01 19:23:56
GMP有一个库函数可以为您做这件事:
size_t mpz_sizeinbase (mpz_t OP, int BASE)则mpz_sizeinbase(temp,2);是表示abs(temp)所需的位数
返回OP的大小,单位为给定基数的位数。基数可以在2到62之间变化。OP的符号被忽略,只使用绝对值。结果要么是精确的,要么是太大了。如果BASE是2的幂,则结果始终是精确的。如果OP为零,则返回值始终为1。
https://stackoverflow.com/questions/11757300
复制相似问题