দুটি পূর্ণসংখ্যা m এবং a দেওয়া আছে। এখন n = p₁^(a+1) × p₂^(a+2) × ... × pₘ^(a+m), যেখানে pᵢ হল i-তম अभाज্য সংখ্যা এবং i > 0। আমাদের k-এর মান বের করতে হবে, যেখানে k = n-এর সব约数ের f(x) মানের সামষ্টিক। এখানে f(x) মানগুলো হল n-এর প্রতিটি 약수의 약수의 개수।
ইনপুট m = 2, a = 1 হলে আউটপুট হবে ৬০।
- n = 2² × 3³
- n = 4 × 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 = 60
সমাধানের ধাপসমূহ
- MOD := 10^9 + 7
- summ() ফাংশন সংজ্ঞায়িত করুন। এটি n গ্রহণ করবে:
- floor((n × (n + 1)) / 2) ফেরত দিন
- division() ফাংশন সংজ্ঞায়িত করুন। এটি a, b, mod গ্রহণ করবে:
- যদি a mod b == 0 হয়, তবে floor(a / b) ফেরত দিন
- a := a + mod × division((-a modulo b), (mod modulo b), b)
- floor((a / b) modulo mod) ফেরত দিন
- mat := [1] মান সহ একটি লিস্ট
- mat-এর আকার <= m + a থাকার동안:
- (mat-এর শেষ উপাদান × summ(len(mat)+1)) mod MOD কে mat-এর শেষে যোগ করুন
- division(mat[m + a], mat[a], 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