Подпоследовательность - это любая последовательность, которую вы можете получить от другой, удалив любое количество символов. Отличительные непустые подпоследовательности 100являются 0, 1, 00, 10, 100. Отличительные непустые подпоследовательностями 1010являются 0, 1, 00, 01, 10, 11, 010, 100, 101, 110, 1010.
Напишите программу или функцию с заданным положительным целым числом n, которая возвращает число различных непустых подпоследовательностей двоичного расширения n .
Пример: так как 4находится 100в двоичном, и мы видели, что у него было пять различных непустых подпоследовательностей выше, поэтому f(4) = 5. Начиная с n = 1 , последовательность начинается:
1, 3, 2, 5, 6, 5, 3, 7, 10, 11, 9, 8, 9, 7, 4, 9, 14, 17, 15, 16, 19, 17, 12
Однако ваша программа должна работать при любом n <2 50 в секунду на любой современной машине. Несколько больших примеров:
f(1099511627775) = 40
f(1099511627776) = 81
f(911188917558917) = 728765543
f(109260951837875) = 447464738
f(43765644099) = 5941674