मान लीजिए हमारे पास एक संख्या n है, हमें 1 से n तक के बाइनरी प्रतिनिधित्व को क्रम में एक-एक करके जोड़कर बने बाइनरी स्ट्रिंग का दशमलव मान ज्ञात करना है, यदि उत्तर बहुत बड़ा है तो उत्तर को 10^9 + 7 मॉड्यूलो वापस करें।
इसलिए, यदि इनपुट है n = 4, तो आउटपुट 220 होगा क्योंकि, 1 से 4 तक बाइनरी प्रतिनिधित्व को जोड़ने पर "1" + "10" + "11" + "100" = 110111000 मिलेगा, यह 220 का बाइनरी प्रतिनिधित्व है।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- ans := 1
- m := 10^9+7
- i को 2 से n तक के लिए, करें
- ans := ans को i की बिट लंबाई की संख्या में शिफ्ट करें
- ans := (ans+i) mod m
- ans वापस करें
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
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))
इनपुट
4
आउटपुट
220