Một chuỗi là bất kỳ chuỗi nào bạn có thể nhận được từ một chuỗi khác bằng cách xóa bất kỳ số lượng ký tự. Các biệt subsequences không trống của 100
là 0
, 1
, 00
, 10
, 100
. Các subsequences không trống riêng biệt của 1010
là 0
, 1
, 00
, 01
, 10
, 11
, 010
, 100
, 101
, 110
, 1010
.
Viết chương trình hoặc hàm cho số nguyên dương n trả về số lượng các chuỗi không trống khác biệt của khai triển nhị phân của n .
Ví dụ: vì 4
là 100
ở dạng nhị phân, và chúng tôi đã thấy rằng nó có năm chuỗi không trống khác biệt ở trên, vì vậy f(4) = 5
. Bắt đầu từ n = 1 , chuỗi bắt đầu:
1, 3, 2, 5, 6, 5, 3, 7, 10, 11, 9, 8, 9, 7, 4, 9, 14, 17, 15, 16, 19, 17, 12
Tuy nhiên, chương trình của bạn phải hoạt động cho mọi n <2 50 dưới một giây trên bất kỳ máy hiện đại nào. Một số ví dụ lớn:
f(1099511627775) = 40
f(1099511627776) = 81
f(911188917558917) = 728765543
f(109260951837875) = 447464738
f(43765644099) = 5941674