玩中学。。
全部博文(3)
分类: C/C++
2014-04-16 14:29:40
点击(此处)折叠或打开
点击(此处)折叠或打开
n = (bm bm-1 ··· b1 b0)2
也就是说
n = bm2m + bm-12m-1 + ··· + b0
其中每个 bi 为0或者1,而首位数字bm是1。所以我们有:
n = (1 bm-1 ··· b1 b0)2
l = (0 bm-1 ··· b1 b0)2
2 l = (bm-1 ··· b1 b0 0)2
J(n) = 2 l + 1 = (bm-1 ··· b1 b0 1)2
我们惊奇的发现n的二进制向左循环移动一位就得到了J(n)!
同样如果是m = 3时,只要转换成三进制就行呢!依次类推、。。
实在是不可思议!
例如如果计算 n = 100 = (1100100)2,那么J(n) = (1001001)2= 73.
不过这种方式有些缺陷。比如当n = 13 时,J(13) = J((1101)2 ) = (111)2 = 7并不是正确结果。
当0为首位时它会消失,导致结果错误。对于其详细的解释以及这种方法的改进推广延伸,有兴趣的话,小伙伴们可以自己研究研究,具体数学中也有较为详细的解释。