মনে করুন একটি সংখ্যা n আছে। ১ থেকে n পর্যন্ত সংখ্যাগুলোর বাইনারি রিপ্রেজেন্টেশন ক্রমশः কনক্যাটেনেট করে বাইনারি স্ট্রিং বানাতে হবে এবং তার ডেসিম্যাল ভ্যালু বের করতে হবে। উত্তর বড় হলে 10^9 + 7 দিয়ে মডুলো রিটার্ন করুন।
যেমন, ইনপুট n = 4 হলে, আউটপুট হবে ২২০ কারণ, ১ থেকে ৪ পর্যন্ত বাইনারি কনক্যাটেনেট করলে "1" + "10" + "11" + "100" = 110111000, যা ২২০-এর বাইনারি রিপ্রেজেন্টেশন।
সমাধান পদ্ধতি
এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:
- ans := 1
- m := 10^9+7
- i = 2 থেকে n পর্যন্ত
- ans := ans << (i.bit_length())
- ans := (ans + i) % m
- ans রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:
def solve(n): ans = 1 m = (10**9+7) for i in range(2,n+1): ans = ans<ইনপুট
4আউটপুট
220