ধরুন আমাদের পূর্ণসংখ্যার একটি পরিসর দেওয়া হয়েছে এবং পরিসরের বিশেষ সংখ্যাগুলি খুঁজে বের করতে বলা হয়েছে। একটি বিশেষ সংখ্যা হল এমন একটি সংখ্যা যা একটি ধনাত্মক পূর্ণসংখ্যা যার দশমিক প্রতিনিধিত্বে মাত্র 1 সংখ্যা থাকে। যে সংখ্যাটির দশমিক উপস্থাপনায় 1 এর বেশি সংখ্যা রয়েছে সেটিও বিশেষ হতে পারে যদি সংখ্যাটি তার দশমিক প্রতিনিধিত্বে সংখ্যার গণনা দ্বারা বিভাজ্য হয় এবং ভাগফলের মান নিজেই একটি বিশেষ সংখ্যা হয়। আমরা প্রদত্ত পরিসরে বিশেষ সংখ্যার গণনা ফেরত দিই (বাম_সীমা, ডান_সীমা)।
সুতরাং, যদি ইনপুট হয় left_limit =5, right_limit =30, তাহলে আউটপুট হবে 13।
এই পরিসরের বিশেষ সংখ্যাগুলি হল:5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24 এবং 28৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- যদি ডান_সীমা <10 হয়, তাহলে
- রিটার্ন ডান_সীমা - বাম_সীমা + 1
- len_right :=(right_limit) এর স্ট্রিং প্রতিনিধিত্বের আকার
- সংখ্যা_তালিকা :=[0,1,2,3,4,5,6,7,8,9,10,12,14,16,18] 2 থেকে len_right + 1 পর্যন্ত j-এর জন্য
- করুন
- সংখ্যা_তালিকায় প্রতিটি k-এর জন্য, করুন
- temp1 :=k * j
- যদি temp1 এর স্ট্রিং উপস্থাপনার আকার j এর মত হয়, তাহলে
- সংখ্যা_তালিকার শেষে টেম্প১ ঢোকান
- অন্যথায় যখন len(str(temp1))> j, তারপর
- লুপ থেকে বেরিয়ে আসুন
- যদি নম্বর_তালিকা[সংখ্যা_তালিকার আকার - 1]>=ডান_সীমা, তাহলে
- লুপ থেকে বেরিয়ে আসুন
- সংখ্যা_তালিকায় প্রতিটি k-এর জন্য, করুন
- number_list থেকে ডুপ্লিকেট মান মুছে দিন এবং সাজান
- গণনা :=0
- সংখ্যা_তালিকায় প্রতিটি temp2 এর জন্য, করুন
- যদি temp2>=left_limit এবং temp2 <=right_limit, তারপর
- গণনা :=গণনা + 1
- যদি temp2>=left_limit এবং temp2 <=right_limit, তারপর
- রিটার্ন গণনা
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def strange(left_limit, right_limit): if right_limit < 10: return right_limit - left_limit + 1 len_right = len(str(right_limit)) number_list = [0,1,2,3,4,5,6,7,8,9,10,12,14,16,18] for j in range(2, len_right + 1): for k in number_list: temp1 = k*j if len(str(temp1)) == j: number_list.append(temp1) elif len(str(temp1)) > j: break if number_list[len(number_list)-1] >= right_limit: break number_list = list(set(number_list)) count = 0 for temp2 in number_list: if temp2 >= left_limit and temp2 <= right_limit: count = count + 1 return count print(strange(5, 30))
ইনপুট
5, 30
আউটপুট
13