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 100là 0, 1, 00, 10, 100. Các subsequences không trống riêng biệt của 1010là 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ì 4là 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