这是我当前的解决方案,用于查找任何给定正整数n的两个的下一个和上一个幂,并且是一个确定数字是否为2的幂的小函数。
此实现适用于Ruby。
class Integer def power_of_two? (self & (self - 1) == 0) end def next_power_of_two return 1 if self <= 0 val = self val = val - 1 val = (val >> 1) | val val = (val >> 2) | val val = (val >> 4) | val val = (val >> 8) | val val = (val >> 16) | val val = (val >> 32) | val if self.class == Bignum val = val + 1 end def prev_power_of_two return 1 if self <= 0 val = self val = val - 1 val = (val >> 1) | val val = (val >> 2) | val val = (val >> 4) | val val = (val >> 8) | val val = (val >> 16) | val val = (val >> 32) | val if self.class == Bignum val = val - (val >> 1) endend
使用示例:
10.power_of_two? => false16.power_of_two? => true10.next_power_of_two => 1610.prev_power_of_two => 8
对于前一个2的幂,找到下一个并除以2的速度比上面的方法稍慢。
我不确定Bignums如何运作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)