在PARI/GP中如何实现bit_length()的等效功能?
PARI/GP实现bit_length功能的方法
在PARI/GP中要实现类似其他语言中bit_length()(返回整数二进制表示的位数)的功能,有两种兼容官方在线解释器的实现方案:
- 全版本通用方案:将目标整数传入
binary()函数得到二进制位组成的列表,再取列表长度即可,语法为length(binary(目标整数))
示例:计算十进制数10的bit_length,10的二进制为1010,运行length(binary(10))返回结果为4,符合预期。 - 高性能内置方案:最新版PARI/GP已原生内置
bitlength()函数,可直接调用,语法为bitlength(目标整数)
示例:运行bitlength(12345)返回结果为14,和length(binary(12345))运行结果完全一致。
如果需要和Python的bit_length()行为完全对齐(即0的bit_length返回0,而非默认的1),可以自定义如下函数:bit_length(x) = if(x == 0, 0, length(binary(x)))
测试效果:
? bit_length(0) %1 = 0 ? bit_length(1) %2 = 1 ? bit_length(2^10 - 1) %3 = 10
内容的提问来源于stack exchange,提问作者oppressionslayer
相关产品推荐
相关产品推荐

