Una sottosequenza è qualsiasi sequenza che è possibile ottenere da un'altra eliminando qualsiasi quantità di caratteri. Le distinte sottosequenze non vuote di 100
sono 0
, 1
, 00
, 10
, 100
. Le sottosequenze non vuote distinte 1010
sono 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
è 100
in 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