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

C++-এ প্রথম অ্যারেতে থাকা উপাদান গণনা যা দ্বিতীয় অ্যারেতে কমপক্ষে একটি উপাদান দ্বারা ভাগযোগ্য

আমাদের দুটি অ্যারে দেওয়া আছে, যেমন arr_1[] এবং arr_2[], যাদের উভয়তেই পূর্ণসংখ্যা মান রয়েছে। আমাদের কাজ হল প্রথম অ্যারেতে থাকা সেই উপাদানগুলির সংখ্যা গণনা করা যা দ্বিতীয় অ্যারেতে থাকা কমপক্ষে একটি উপাদান দ্বারা ভাগযোগ্য। অর্থাৎ, আমাদের সেই উপাদানগুলি গণনা করতে হবে যাদের কমপক্ষে একটি ফ্যাক্টর দ্বিতীয় অ্যারেতে (arr_2) রয়েছে।

উদাহরণ

ইনপুট − int arr_1[] = {1, 2, 3, 4, 5}       arr_2[] = {2, 6, 12, 15} আউটপুট − গণনা 2

ব্যাখ্যা − arr_1[]-এ 5টি উপাদান এবং arr_2[]-এ 4টি উপাদান রয়েছে। arr_1[]-এর সব উপাদান arr_2[]-এর দ্বারা ভাগযোগ্য। তাই গণনা 5।

ইনপুট − int arr_1[] = {1, 2, 3, 4, 5}       arr_2[] = {13, 11} আউটপুট − গণনা 0

ব্যাখ্যা − arr_1[]-এ 5টি উপাদান এবং arr_2[]-এ 2টি উপাদান রয়েছে। arr_1[]-এর কোনো উপাদান arr_2[]-এর দ্বারা ভাগযোগ্য নয়। তাই গণনা 0।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • দুটি অ্যারে তৈরি করুন, যেমন arr_1[] এবং arr_2[]
  • length() ফাংশন দিয়ে দুটি অ্যারের দৈর্ঘ্য গণনা করুন
  • একটি অস্থায়ী ভেরিয়েবল নিন যা উপাদানগুলির গণনা সংরক্ষণ করবে
  • একটি unordered_set ভেরিয়েবল তৈরি করুন, যেমন us
  • i = 0 থেকে দ্বিতীয় অ্যারের আকার পর্যন্ত লুপ শুরু করুন
  • লুপের ভিতরে arr_2[i] ইনসার্ট করুন
  • আরেকটি লুপ i = 0 থেকে প্রথম অ্যারের আকার পর্যন্ত শুরু করুন
  • লুপের ভিতরে j = 1 থেকে j * j <= arr_1[i] পর্যন্ত লুপ শুরু করুন
  • যদি arr_1[i] % j == 0 হয় তবে চেক করুন us.find(j) != us.end() অথবা us.find(arr_1[i]/j) != us.end() হলে count 1 বৃদ্ধি করুন
  • অন্যথায়, break করুন
  • count ফেরত দিন
  • ফলাফল প্রিন্ট করুন

উদাহরণ কোড

#include <iostream>
#include <unordered_set>
using namespace std;

// প্রথম অ্যারেতে থাকা উপাদানগুলির সংখ্যা গণনা যাদের কমপক্ষে একটি ফ্যাক্টর দ্বিতীয় অ্যারেতে আছে
int totalelements(int arr_1[], int size1, int arr_2[], int size2) {
    // 'result' ভেরিয়েবল উপাদান গণনা করার জন্য
    int result = 0;
    
    // দ্বিতীয় অ্যারের উপাদানগুলির হ্যাশ
    unordered_set<int> h;
    for (int i = 0; i < size2; i++) {
        h.insert(arr_2[i]);
    }
    
    // অ্যারে উপাদানগুলি ট্রাভার্স করুন এবং তাদের ফ্যাক্টর খুঁজুন
    for (int i = 0; i < size1; i++) {
        for (int j = 1; j * j <= arr_1[i]; j++) {
            if (arr_1[i] % j == 0) {
                // ফ্যাক্টর দ্বিতীয় অ্যারেতে আছে কিনা h ব্যবহার করে চেক করুন
                if ((h.find(j) != h.end()) || (h.find(arr_1[i] / j) != h.end())) {
                    result++;
                    break;
                }
            }
        }
    }
    return result;
}

// Main ফাংশন
int main() {
    int arr_1[] = { 1, 2, 3, 4, 5 };
    int arr_2[] = { 2, 6, 12, 15 };
    int size1 = sizeof(arr_1) / sizeof(arr_1[0]);
    int size2 = sizeof(arr_2) / sizeof(arr_2[0]);
    cout << "count is " << totalelements(arr_1, size1, arr_2, size2);
    return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি রান করি তবে নিচের আউটপুট পাব −

count is 2
  1. C++-এ সার্কুলার অ্যারেতে আঁচবিক উপাদান ছাড়া সর্বোচ্চ যোগফল বের করার পদ্ধতি

  2. C++-এ অ্যারেতে কমপক্ষে একটি অন্য উপাদান দিয়ে বিভাজ্য সংখ্যাগুলো প্রিন্ট করুন

  3. C++ ব্যবহার করে অ্যারেতে এমন এলিমেন্ট বের করা যেটি সব এলিমেন্টকে ভাগ করে দেয়

  4. অ্যারে উপাদানগুলোর সারপাসার (Surpasser) কাউন্ট (C++)