परिचय
इस ट्यूटोरियल में हम एक ऐसा प्रोग्राम लिखेंगे जो एक संख्या ढूंढता है जिससे सरणी के प्रत्येक तत्व के साथ उसका मॉड्यूलस (modulus) समान हो। आइए एक उदाहरण देखते हैं।
इनपुट - 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 का भी भाजक होगा।
समस्या समाधान के चरण
- सरणी को संख्याओं से इनिशियलाइज़ करें।
- यहां, 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];
// जांचें कि सभी तत्व समान हैं या नहीं
if (d == 0) {
cout << "Infinite number of k's";
return;
}
// 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);
}
}
}
// 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
निष्कर्ष
सरणी {10, 4, 2} के लिए, अधिकतम = 10, न्यूनतम = 2, अंतर = 8। 8 के भाजक: 1, 2, 4, 8। इनमें से 1 और 2 सभी तत्वों के साथ समान मॉड्यूलो देते हैं (10%1=4%1=2%1=0, 10%2=4%2=2%2=0)। यदि आपके कोई प्रश्न हैं, तो कमेंट सेक्शन में पूछें।