Una subsecuencia es cualquier secuencia que puede obtener de otra eliminando cualquier cantidad de caracteres. Las distintas subsecuencias no vacío de 100
son 0
, 1
, 00
, 10
, 100
. Las subsecuencias no vacías distintas de 1010
son 0
, 1
, 00
, 01
, 10
, 11
, 010
, 100
, 101
, 110
, 1010
.
Escribir un programa o función que dado un número entero positivo n devuelve el número de subsecuencias distintas no vacías de la expansión binaria de n .
Ejemplo: dado que 4
está 100
en binario, y vimos que tenía cinco subsecuencias distintas no vacías arriba, entonces f(4) = 5
. A partir de n = 1 , comienza la secuencia:
1, 3, 2, 5, 6, 5, 3, 7, 10, 11, 9, 8, 9, 7, 4, 9, 14, 17, 15, 16, 19, 17, 12
Sin embargo, su programa debe funcionar para cualquier n <2 50 en menos de un segundo en cualquier máquina moderna. Algunos grandes ejemplos:
f(1099511627775) = 40
f(1099511627776) = 81
f(911188917558917) = 728765543
f(109260951837875) = 447464738
f(43765644099) = 5941674