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 100sind 0, 1, 00, 10, 100. Die unterschiedlichen nicht-leeren Teilsequenzen 1010sind 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 4ist 100in 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