Подпоследовательность - это любая последовательность, которую вы можете получить от другой, удалив любое количество символов. Отличительные непустые подпоследовательности 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