কম্পিউটার টিউটোরিয়াল

পাইথনে 약수의 약수 개수의 합을 구하는 프로그램

দুটি পূর্ণসংখ্যা 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
  1. পাইথন প্রোগ্রামে অ্যারের যোগফল বের করা

  2. পাইথন প্রোগ্রাম লিস্টে সবচেয়ে ছোট সংখ্যা বের করা

  3. একটি সংখ্যার সম ফ্যাক্টরের যোগফল বের করার পাইথন প্রোগ্রাম

  4. পাইথনে অ্যারের যোগফল বের করা