Una subsecuencia es cualquier secuencia que puede obtener de otra eliminando cualquier cantidad de caracteres. Las distintas subsecuencias no vacío de 100son 0, 1, 00, 10, 100. Las subsecuencias no vacías distintas de 1010son 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 4está 100en 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