|
|
原帖由 lastwinner 于 10-9-30 17:00 发表 ![]()
…………
长度为n位的所有二进制数,1出现的次数a1(n)为:.....................(2)
当n=1时,a1(n)=1
当n>1时,a1(n)=……=(n+1)*2^(n-2)
…………
对于[8192, 8192+2^10),可看作2^10之内的所有二进制再加2^13,该区间内的数字有多少个1多少个0可以转换为求2^10内有多少个1多少个0,在最后的结果上,1出现的次数再加上2^10*1,0出现的次数因涉及到补0,故而直接计算比较麻烦(程序做起来就是一个循环而已)
对于[8192+2^10, 8192+2^10+2^9),可看作2^9之内的所有二进制再加2^13+2^10,该区间内的数字有多少个1可以转换为求2^9内有多少个1,在最后的结果上,1出现的次数再加上2^9*2
以此类推
对于[8192+2^10+2^9, 8192+2^10+2^9+2^8),1出现的次数为2^8内有多少个1,在此结果上,1出现的次数再加上2^8*3
对于[8192+2^10+2^9+2^8, 9999),1出现的次数为2^4内有多少个1,在此结果上,1出现的次数再加上2^4*4
…………
依据之前的推论,得
[0,9999]转换成的二进制数中,1总共有S1个
S1=a1(1)+a1(2)+a1(3)+...+a1(13)
+(a1(1)+a1(2)+a1(3)+...+a1(10))+2^10*1
+(a1(1)+a1(2)+a1(3)+...+a1(9))+2^9*2
+(a1(1)+a1(2)+a1(3)+...+a1(8))+2^8*3
+(a1(1)+a1(2)+a1(3)+a1(4))+2^4*4
=64608
0的总个数S0也自然容易推得:
S0=123618-64608=59010 |
|