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

C++-এ LCM(arr[i],arr[j]) > min(arr[i],arr[j]) শর্ত পূরণ করা জোড়া সংখ্যা গণনা


আমাদের একটি পজিটিভ ইন্টিজার অ্যারে দেওয়া আছে। লক্ষ্য হল এমন জোড়া বের করা যাতে LCM(arr[i], arr[j]) > min(arr[i], arr[j])। নোট: জোড়া (i,j) এবং (j,i) একই, দুবার কাউন্ট করা হবে না।

উদাহরণ

ইনপুট: arr[] = [1,5,4,2]

আউটপুট: ৬

ব্যাখ্যা: সব ৬টি জোড়া শর্ত পূরণ করে।

ইনপুট: arr[] = [3,3,6]

আউটপুট: ২

ব্যাখ্যা: জোড়া: (3,6) দুবার (কারণ দুটি ৩ আছে)।

গ্লimps

শর্তটি মিথ্যা হয় শুধু যখন arr[i] == arr[j]। অর্থাৎ একই মানয়ের জোড়া বাদ দিয়ে বাকি সব জোড়া ভ্যালিড।

অ্যালগরিদম

  1. ফ্রিকোয়েন্সি ম্যাপ um তৈরি করুন।
  2. প্রতিটি ফ্রিকোয়েন্সি f জন্য সমান এলিমেন্টের জোড়া = f*(f-1)/2। এইগুলো বাদ দিন।
  3. মোট জোড়া = n*(n-1)/2।
  4. উত্তর = মোট জোড়া - সমান এলিমেন্টের জোড়া।

C++ বাস্তবায়ন

#include <bits/stdc++.h>
using namespace std;

int conditional_pair(int arr[], int size) {
    int count = 0;
    unordered_map<int, int> um;
    
    for (int i = 0; i < size; i++) um[arr[i]]++;
    
    for (auto it : um) {
        int f = it.second;
        count += f * (f - 1) / 2;
    }
    
    int total = size * (size - 1) / 2;
    return total - count;
}

int main() {
    int arr[] = {4, 1, 7, 3, 2};
    int size = sizeof(arr) / sizeof(arr[0]);
    cout << "Count of pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j]) are: " 
         << conditional_pair(arr, size);
    return 0;
}

আউটপুট

Count of pairs in an array such that LCM(arr[i], arr[j]) > min(arr[i],arr[j]) are: 10
  1. C++-এ অ্যারেতে ভাগযোগ্য জোড়া গণনা

  2. C++-এ অ্যারেতে arr[i] >= arr[j] শর্তে সকল জোড়ার সর্বোच्च মডুলো

  3. C++-এ একটি অ্যারে থেকে x^y > y^x শর্ত পূরণকারী (x, y) জোড়ার সংখ্যা খুঁজুন

  4. C++ ব্যবহার করে অ্যারেতে a % b = k সেটি করার সব জোড়া (a, b) বের করা