Підряд - це будь-яка послідовність, яку ви можете отримати від іншої, видаливши будь-яку кількість символів. Відмінні непусті підпослідовності 100є 0, 1, 00, 10, 100. Відмінні непусті підпослідовність 1010є 0, 1, 00, 01, 10, 11, 010, 100, 101, 110, 1010.
Напишіть програму або функцію, яка задає натуральне число n повертає кількість виразних непустих підрядів двійкового розширення n .
Приклад: оскільки 4є 100у двійковій формі, і ми побачили, що в ньому було п'ять чітких непорожніх підрядів вище, так f(4) = 5. Починаючи з n = 1 , послідовність починається:
1, 3, 2, 5, 6, 5, 3, 7, 10, 11, 9, 8, 9, 7, 4, 9, 14, 17, 15, 16, 19, 17, 12
Однак ваша програма повинна працювати на будь-яку n <2 50 дюймів за секунду на будь-якій сучасній машині. Кілька великих прикладів:
f(1099511627775) = 40
f(1099511627776) = 81
f(911188917558917) = 728765543
f(109260951837875) = 447464738
f(43765644099) = 5941674