ধরুন আমাদের একটি সংখ্যা n আছে। আমাদের n-এর ডিভাইজরগুলো থেকে কোনটি "বেটার" সেটা বের করতে হবে এই শর্ত অনুযায়ী: দুটি সংখ্যা p এবং q আছে, যেটির ডিজিটের যোগফল বেশি সেটিই "বেটার"। যদি ডিজিটের যোগফল একই হয়, তবে ছোট সংখ্যাটিই "বেটার"।
উদাহরণস্বরূপ, যদি ইনপুট n = 180 হয়, তবে আউটপুট হবে 9 কারণ ডিভাইজরগুলো হলো [1, 2, 3, 4, 5, 6, 9, 10, 12, 15, 18, 20, 30, 36, 45, 60, 90, 180]। যাদের ডিজিট সম সবচেয়ে বেশি সেগুলো হলো [9, 18, 36, 45, 90, 180], কিন্তু তাদের মধ্যে 9 বেটার কারণ এর মান সবচেয়ে ছোট।
সমাধানের ধাপসমূহ
div := 1, md := 1for i in range 2 to n:k := i- যদি
n % i > 0, তবে নেক্সট ইটারেশন s := 0while k > 0:s := s + k % 10k := k // 10
- যদি
s > md, তবেmd := sএবংdiv := i
divরিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝার জন্য:
def solve(n):
div = 1
md = 1
for i in range(2, n + 1):
k = i
if n % i > 0:
continue
s = 0
while k > 0:
s += k % 10
k //= 10
if s > md:
md = s
div = i
return div
n = 180
print(solve(n))
ইনপুট
180
আউটপুট
9