|
发表于 2007-10-16 21:24:51
|
显示全部楼层
纯组合数学问题, 可以在O(1)的时间内求出:
我的算法如下:
假设数字为: A_n, A_n-1, .... A_1 (最高位上的数位A_n, 个位上的数为A_1)
设函数G(n): 表示至少含有n个1的数的个数 :
所以: G(1) = [ (A_n-1+1)*(A_n-2+1)* ... *(A_1+1) ] + [(A_n+1)*(A_n-2+1)*....A-1) ]
G(2) = [ (A_n-2+1)*(A_n-3)*....(A_1+1) ] + ........
G(n) = 1
f(N) = [G(1) - G(2) + G(3) ...........]+ [ G(2) + 2G(3) + 3G(4) +..... (n-1)G(n) ]
----------------
例如: 假设数13, 则 a=1, b= 3, 所以, G(1)= 4+2 =6 , G(2) = 1
所以: f(13) = 6-1+1 = 6
---------------------------------
错误之处, 望指正, 谢谢 |
|