Una sottosequenza è qualsiasi sequenza che è possibile ottenere da un'altra eliminando qualsiasi quantità di caratteri. Le distinte sottosequenze non vuote di 100sono 0, 1, 00, 10, 100. Le sottosequenze non vuote distinte 1010sono 0, 1, 00, 01, 10, 11, 010, 100, 101, 110, 1010.
Scrivi un programma o una funzione che dato un numero intero positivo n restituisce il numero di sottosequenze distinte non vuote dell'espansione binaria di n .
Esempio: dato che 4è 100in binario, e abbiamo visto che aveva cinque sottosezioni distinte non vuote sopra, quindi f(4) = 5. A partire da n = 1 , la sequenza inizia:
1, 3, 2, 5, 6, 5, 3, 7, 10, 11, 9, 8, 9, 7, 4, 9, 14, 17, 15, 16, 19, 17, 12
Tuttavia, il tuo programma deve funzionare per qualsiasi n <2 50 in meno di un secondo su qualsiasi macchina moderna. Alcuni grandi esempi:
f(1099511627775) = 40
f(1099511627776) = 81
f(911188917558917) = 728765543
f(109260951837875) = 447464738
f(43765644099) = 5941674