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

হাইপাররেক্ট্যাঙ্গেল সেলের GCD যোগফল বের করা

একটি হাইপাররেক্ট্যাঙ্গেলের k ডাইমেনশন আছে, প্রতিটি ডাইমেনশনের দৈর্ঘ্য n1, n2, ..., nm। সেলগুলো এড্রেস করা হয় (p,q,r,...) এবং মান থাকে gcd(p,q,r,...)। ১ ≤ p ≤ n1, ১ ≤ q ≤ n2, ইত্যাদি। সব সেলের gcd যোগফল বের করতে হবে (মডুলো ১০⁹+৭)। ইন্ডেক্সিং ১ থেকে শুরু।

ইনপুট: [[2,2], [5,5]] → আউটপুট: [5, 37]।

প্রথম ইনস্ট্যান্স (২×২): gcd যোগফল = ১+১+১+২ = ৫।

দ্বিতীয় ইনস্ট্যান্স (৫×৫): gcd যোগফল = ৩৭।

সমাধানের ধাপসমূহ (ইনক্লুশন-এক্সক্লুশন + মবিয়াস ইনভার্সন)

  • coeff_find(test_instance, i): ∏(k // i) for k in test_instance

  • প্রতিটি test_instance-এর জন্য:

    • min_value = min(test_instance)
    • total_value = 0, temp_dict = {}
    • i = min_value থেকে ১ পর্যন্ত (উল্টা):
      • p = coeff_find(test_instance, i)
      • q = i; যখন q <= min_value: q += i; যদি q ∈ temp_dict: p -= temp_dict[q]
      • temp_dict[i] = p
      • total_value += temp_dict[i] * i
  • total_value % (10⁹+7) আউটপুটে যোগ করুন

উদাহরণ (Python)

def coeff_find(test_instance, i):
    value = 1
    for k in test_instance:
        value *= k // i
    return value

def solve(input_arr):
    output = []
    for test_instance in input_arr:
        min_value = min(test_instance)
        total_value = 0
        temp_dict = {}
        for i in range(min_value, 0, -1):
            p = coeff_find(test_instance, i)
            q = i
            while q <= min_value:
                q += i
                if q in temp_dict:
                    p -= temp_dict[q]
            temp_dict[i] = p
            total_value += temp_dict[i] * i
        output.append(total_value % (10**9 + 7))
    return output

print(solve([[2, 2], [5, 5]]))

ইনপুট

[[2, 2], [5, 5]]

আউটপুট

[5, 37]
  1. পাইথনে ট্রি থেকে একটি এজ কাট করে দুটি সাবট্রিের নোড ভ্যালু সামের পার্থক্য মিনিমাইজ করা

  2. পাইথনে গ্রাফ সবাই দ্বারা ট্রাভার্সেবল কিনা চেক করার প্রোগ্রাম

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

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