Eine Untersequenz ist eine beliebige Sequenz, die Sie durch Löschen einer beliebigen Anzahl von Zeichen von einer anderen abrufen können. Die unterschiedlichen nicht-leeren Teilsequenzen 100
sind 0
, 1
, 00
, 10
, 100
. Die unterschiedlichen nicht-leeren Teilsequenzen 1010
sind 0
, 1
, 00
, 01
, 10
, 11
, 010
, 100
, 101
, 110
, 1010
.
Schreiben Sie ein Programm oder eine Funktion, die bei einer positiven Ganzzahl n die Anzahl der eindeutigen nicht leeren Teilsequenzen der binären Erweiterung von n zurückgibt .
Beispiel: da 4
ist 100
in binär, und wir haben gesehen, dass es oben fünf verschiedene nicht leere Untersequenzen hatte, also f(4) = 5
. Ab n = 1 beginnt die Sequenz:
1, 3, 2, 5, 6, 5, 3, 7, 10, 11, 9, 8, 9, 7, 4, 9, 14, 17, 15, 16, 19, 17, 12
Ihr Programm muss jedoch auf jedem modernen Computer in weniger als einer Sekunde für n <2 50 funktionieren . Einige große Beispiele:
f(1099511627775) = 40
f(1099511627776) = 81
f(911188917558917) = 728765543
f(109260951837875) = 447464738
f(43765644099) = 5941674