একটি ইন্টিজার k খুঁজে বের করতে হবে যাতে অ্যারে arr[]-এর সব উপাদানের সাথে k দিয়ে মডুলাস (remainder) একই থাকে।
গাণিতিক বিষয়ক
দুটি উপাদান x > y হলে: (y + diff) % k = y % k → diff % k = 0।
সুতরাং k হবে max(arr) - min(arr) এর যেকোনো ডিভাইসর।
অ্যালগরিদম
- অ্যারে সর্ট করুন,
diff = arr[n-1] - arr[0]। diff-এর সব ডিভাইসর বের করুন।- প্রতিটি ডিভাইসর
kএর জন্য চেক করুন: সবarr[i] % kসমান কিনা।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void findK(int arr[], int n) {
sort(arr, arr+n);
int diff = arr[n-1] - arr[0];
vector<int> divs;
for (int i=1; i*i<=diff; i++) {
if (diff%i==0) {
divs.push_back(i);
if (i != diff/i) divs.push_back(diff/i);
}
}
for (int k : divs) {
int rem = arr[0] % k;
bool ok = true;
for (int i=1; i
আউটপুট
Values of K: 1 2 5 10