मान लीजिए हमें दो इंटीजर नंबर 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 है, तो आउटपुट 60 होगा।
- 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 लेता है और (n * (n + 1)) / 2 का फ्लोर मान लौटाता है
- division() फंक्शन परिभाषित करें मॉड्यूलर विभाजन के लिए
- mat सरणी बनाएं और संचयी गुणनफल की गणना करें
- मॉड्यूलर विभाजन का उपयोग करके अंतिम परिणाम लौटाएं
उदाहरण कार्यान्वयन
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