এই টিউটোরিয়ালে, আমরা একটি প্রোগ্রাম লিখতে যাচ্ছি যেটি এমন একটি সংখ্যা খুঁজে বের করে যাতে প্রতিটি অ্যারের উপাদানের সাথে এর মডুলাস একই থাকে। আসুন একটি উদাহরণ দেখি।
ইনপুট − 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
উপসংহার
টিউটোরিয়ালে আপনার কোন প্রশ্ন থাকলে মন্তব্য বিভাগে উল্লেখ করুন।