Podsekwencja to dowolna sekwencja, którą można uzyskać z innej, usuwając dowolną liczbę znaków. Wyraźne niepustymi subsekwencje 100są 0, 1, 00, 10, 100. Wyraźne niepustymi subsekwencje 1010są 0, 1, 00, 01, 10, 11, 010, 100, 101, 110, 1010.
Napisz program lub funkcję, która podając dodatnią liczbę całkowitą n zwraca liczbę różnych niepustych podciągów binarnego rozszerzenia n .
Przykład: ponieważ 4jest 100binarny i widzieliśmy, że ma pięć różnych niepustych podsekwencji powyżej, więc f(4) = 5. Począwszy od n = 1 , sekwencja zaczyna się:
1, 3, 2, 5, 6, 5, 3, 7, 10, 11, 9, 8, 9, 7, 4, 9, 14, 17, 15, 16, 19, 17, 12
Jednak Twój program musi działać dla dowolnego n <2 50 w ciągu sekundy na dowolnej nowoczesnej maszynie. Kilka dużych przykładów:
f(1099511627775) = 40
f(1099511627776) = 81
f(911188917558917) = 728765543
f(109260951837875) = 447464738
f(43765644099) = 5941674