ধরুন আমাদের একটি সংখ্যা n আছে, আমাদেরকে 1 থেকে n-এর বাইনারি উপস্থাপনাগুলিকে একের পর এক ক্রমানুসারে সংযুক্ত করে বাইনারি স্ট্রিং-এর দশমিক মান খুঁজে বের করতে হবে, যদি উত্তরটি খুব বড় হয় তাহলে উত্তর মডিউল 10^9 + 7 দিন।
সুতরাং, যদি ইনপুটটি n =4 এর মত হয়, তাহলে আউটপুট হবে 220 কারণ, 1 থেকে 4 পর্যন্ত বাইনারি উপস্থাপনাকে একত্রিত করে "1" + "10" + "11" + "100" =110111000 হবে, এটি বাইনারি 220 এর প্রতিনিধিত্ব।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- উত্তর :=1
- m :=10^9+7
- 2 থেকে n রেঞ্জের i জন্য, করুন
- উত্তর :=শিফট উত্তর (i এর বিট দৈর্ঘ্য) বার সংখ্যা
- ans :=(ans+i) mod m
- উত্তর ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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