Hailstone Sequence问题是一个著名的数学问题,至今没有证明其正确性,也没证明其是错误的,即任何一个正整数N,如果是偶数的话就÷2,如果是奇数的话就×3+1,最后这个数都会变为1。
代码如下:
while( n > 1 )
{
if ( n & 1 )
else
n = n>>1; // n = n/2
}
拿 n = 15 举例:
15: 1111 ---- 2进制1111在*3+1的过程中很容易就产生了10的情况,而一旦0产生,就不容易被抹去。 46: 101110 23: 10111 ---- 结尾是1的,在*3+1的过程中,结尾会产生0,然后就被抹去 70: 1000110 35: 100011 106: 1101010 53: 110101 --- 2进制数中带有0101的数,很容易在*3+1的过程中变成00000的情况 160: 10100000 --- 这类结尾全是0的,会直接被抹去,最终变成101 80: 1010000 40: 101000 20: 10100 10: 1010 5: 101 16:10000 8: 1000 4: 100 2: 10 1: 1
根据从2进制分析,
1) 结尾是0的直接被抹去
2) 结尾是1的,在*3+1的过程中,结尾又产生了0,又会被抹去
3)在*3的过程中,整个2进制数串会产生1010这样的形式,然而1010这样的形式在*3+1的过程中是活不久的,所以避免不了被抹去的命运。
综上所述:虽然n在整个变化过程中,看起来 ×3+1 比 ÷2 会使数字变得更大,但架不住 ÷2的次数比 x3+1要多,所以n只能是越来越小,最终走向1.
通讯地址:北京市丰台区贾家花园15号院7号楼一层西侧(东铁匠营企业集中办公区)
联系电话:13611276845 联系QQ:71828625; 11919874
©2012-2023 uscube.com 版权所有 京ICP备18038096号-1
营业执照 京公安备11010602006327号