ধরুন আমাদের দুটি পূর্ণসংখ্যা m এবং a দেওয়া হল। এখন n =p1 (a + 1) *p2 (a + 2) **...*pm (a + m) , যেখানে pi i-তম মৌলিক সংখ্যা এবং i> 0। আমাদের k এর মান খুঁজে বের করতে হবে, যেখানে k =f(x) মানের n এর সমষ্টি। এখানে f(x) মান হল n এর প্রতিটি ভাজকের ভাজক মানের সংখ্যা।
সুতরাং, যদি ইনপুট হয় m =2, a =1, তাহলে আউটপুট হবে 60।
- তাই, n =2^2 x 3^3
- n =4 x 27
- n =108
108 এর ভাজক হল:1, 2, 3, 4, 6, 9, 12, 18, 27, 36, 54, 108
প্রতিটি ভাজকের f(x) মান হল:f(1) + f(2) + f(3) + f(4) + f(6) + f(9) + f(12) + f(18) + f(27) + f(36) + f(54) + f(108)
=1 + 2 + 2 + 4 + 4 + 3 + 5 + 6 + 4 + 9 + 8 + 12
=৬০।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- MOD :=10^9 + 7
- একটি ফাংশন সংজ্ঞায়িত করুন summ()। এটি n
- লাগবে
- (n * (n + 1)) / 2) এর রিটার্ন ফ্লোর মান
- একটি ফাংশন বিভাগ() সংজ্ঞায়িত করুন। এটি a, b, mod
- লাগবে
- যদি একটি মোড b 0 এর মত হয়, তাহলে
- a / b এর ফ্লোর ভ্যালু
- a :=a + mod * division((-a modulo b), (mod modulo b), b)
- (a / b) মডুলো মোডের ফ্লোর ভ্যালু
- যদি একটি মোড b 0 এর মত হয়, তাহলে
- mat :=একটি নতুন তালিকা যেখানে একটি মান 1 আছে
- যখন মাদুরের আকার <=m + a, do
- ম্যাটের শেষে সন্নিবেশ করান (ম্যাটের শেষ উপাদান * summ(len(mat)+1)) mod MOD
- রিটার্ন বিভাগ (ম্যাট[এম + এ], ম্যাট[এ], এমওডি)
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
MOD = 10**9 + 7 def summ(n): return ((n) * (n + 1)) // 2 def division(a, b, mod): if a % b == 0: return a // b a += mod * division((-a) % b, mod % b, b) return (a // b) % mod def solve(m, a): mat = [1] while len(mat) <= m + a: mat.append((mat[-1] * summ(len(mat)+1)) % MOD) return division(mat[m + a] , mat[a], MOD) print(solve(2, 1))
ইনপুট
2, 1
আউটপুট
60