Giả sử chúng ta có một số n, chúng ta phải tìm giá trị thập phân của chuỗi nhị phân bằng cách nối các biểu diễn nhị phân từ 1 đến n lần lượt theo thứ tự, nếu câu trả lời quá lớn thì trả về câu trả lời modulo 10 ^ 9 + 7.
Vì vậy, nếu đầu vào là n =4, thì đầu ra sẽ là 220 bởi vì, bằng cách kết hợp biểu diễn nhị phân từ 1 đến 4 sẽ là "1" + "10" + "11" + "100" =110111000, đây là nhị phân đại diện của 220.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- ans:=1
- m:=10 ^ 9 + 7
- đối với tôi trong phạm vi từ 2 đến n, thực hiện
- ans:=shift ans (độ dài bit của i) số lần
- ans:=(ans + i) mod m
- trả lại ans
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def solve(n): ans = 1 m = (10**9+7) for i in range(2,n+1): ans = ans<<i.bit_length() ans = (ans+i) % m return ans n = 4 print(solve(n))
Đầu vào
4
Đầu ra
220