例如,对于输入5,输出应为7.(bin(1)= 1,bin(2)= 10 ... bin(5)= 101) - > 1 + 1 + 2 + 1 + 2 = 7
这是我尝试过的,但它不是一个非常有效的算法,考虑到我为每个整数迭代一次循环.我的代码(Python 3):
i = int(input())
a = 0
for b in range(i+1):
a = a + bin(b).count("1")
print(a)
Run Code Online (Sandbox Code Playgroud)
谢谢!
这是基于OEIS的递归关系的解决方案:
def onecount(n):
if n == 0:
return 0
if n % 2 == 0:
m = n/2
return onecount(m) + onecount(m-1) + m
m = (n-1)/2
return 2*onecount(m)+m+1
>>> [onecount(i) for i in range(30)]
[0, 1, 2, 4, 5, 7, 9, 12, 13, 15, 17, 20, 22, 25, 28, 32, 33, 35, 37, 40, 42, 45, 48, 52, 54, 57, 60, 64, 67, 71]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
84 次 |
最近记录: |