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

C++-এ 'k' বের করা যাতে প্রতিটি অ্যারে এলিমেন্টের সাথে মডুলোসamaan হয়

এই টিউটোরিয়ালে, আমরা একটি প্রোগ্রাম লিখব যা এমন একটি সংখ্যা বের করে যেটার প্রতিটি অ্যারে এলিমেন্টের সাথে মডুলো একই। একটি উদাহরণ দেখি।

ইনপুট - arr = {10, 4, 2}

আউটপুট - 1 2

যদি দুটি সংখ্যা x, y থাকে এবং x > y, ধরি x - y = d।

তবে x = y + d।

মান লইয়া একটি সংখ্যা k যাতে x%k = y%k। উপরের সমীকরণে মডুলো k লাগিয়ে d বের করি।

x%k = (y+d)%k
y%k = y%k + d%k
d%k = 0

উপরের ক্যালকুলেশন থেকে, যদি সংখ্যা k হয় x এবং y-এর পার্থক্যের ডিভাইজর। তবে সেটি x এবং y-এর ডিভাইজরও হবে।

একই কনসেপ্ট অ্যারের এলিমেন্টগুলোর ওপর লাগিয়ে k মান বের করি। সমস্যাটি সমাধানের ধাপগুলো:

  • অ্যারে নাম্বার দিয়ে ইনিশিয়ালাইজ করুন
  • এখানে, d হবে অ্যারে এলিমেন্টগুলোর ম্যাক্স এবং মিন মান পার্থক্য।
  • অ্যারে ভ্যালুগুলো সর্ট মেথড দিয়ে সর্ট করুন।
  • লাস্ট এবং ফার্স্ট নাম্বারের পার্থক্য বের করুন।
  • যদি পার্থক্য শূন্য হয়, তবে সব নাম্বার একই। তবে যেকোনো নম্বরের সাথে মডুলো একই রেজাল্ট দেবে।
  • অন্যথায় সংখ্যা d-এর ডিভাইজরগুলো বের করুন। এবং স্টোর করুন।
  • সকল ডিভাইজরে ইটারেট করুন এবং সেই নাম্বার বের করুন যেটার সব অ্যারে এলিমেন্টের সাথে মডুলো একই।

উদাহরণ

কোডটি দেখি।

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

void findNumbers(int arr[], int n) {
    sort(arr, arr + n);
    int d = arr[n - 1] - arr[0];
    // check whether all elements are same or not
    if (d == 0) {
        cout << "Infinite number of k's";
        return;
    }
    // finding the divisors of d
    vector <int> v;
    for (int i = 1; i * i <= d; i++) {
        if (d % i == 0) {
            v.push_back(i);
            if (i != d / i) {
                v.push_back(d / i);
            }
        }
    }
    // findind the k's
    for (int i = 0; i < v.size(); i++) {
        int temp = arr[0] % v[i];
        int j;
        for (j = 1; j < n; j++) {
            if (arr[j] % v[i] != temp) {
                break;
            }
        }
        if (j == n)
            cout << v[i] << " ";
    }
    cout << endl;
}

int main() {
    int arr[] = {10, 4, 2};
    findNumbers(arr, 3);
    return 0;
}

আউটপুট

1 2

উপসংহার

টিউটোরিয়ালে যদি কোনো প্রশ্ন থাকে, তবে কমেন্ট সেকশনে জানান।

  1. C++-এ ডিরেঞ্জমেন্ট (Derangement) গণনা

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

  3. C++ তে ন্যূনতম এবসোলিউট ডিফারেন্স যোগফল ওয়ালা অ্যারে উপাদান

  4. C++ প্রোগ্রাম: 'k' বের করা যাতে অ্যারে সব উপাদানের সাথে মডুলাস সমান