अवधारणा
किसी दिए गए सरणी सरणी के संबंध में [] जिसमें किसी अन्य सरणी के तत्वों की हर संभावित जोड़ी की जीसीडी होती है, हमारा कार्य मूल संख्याओं को निर्धारित करना है जो जीसीडी सरणी की गणना करने के लिए उपयोग किए जाते हैं।
इनपुट
array[] = {6, 1, 1, 13}
आउटपुट
13 6 gcd(13, 13) = 13 gcd(13, 6) = 1 gcd(6, 13) = 1 gcd(6, 6) = 6
इनपुट
arr[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 8, 11, 13, 3, 3}
आउटपुट
13 11 8 6 6
विधि
-
सबसे पहले, सरणी को घटते क्रम में क्रमबद्ध करें।
-
सबसे बड़ा तत्व हमेशा मूल संख्याओं में से एक होगा। उस नंबर को बनाए रखें और उसे ऐरे से हटा दें।
-
पिछले चरण में लिए गए तत्व के जीसीडी की गणना करें और वर्तमान तत्व सबसे बड़े से शुरू करें और दिए गए सरणी से जीसीडी मान को त्याग दें।
उदाहरण
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Shows utility function to print // the contents of an array void printArr(int array[], int n1){ for (int i = 0; i < n1; i++) cout << array[i] << " "; } // Shows function to determine the required numbers void findNumbers(int array[], int n1){ // Used to sort array in decreasing order sort(array, array + n1, greater<int>()); int freq1[array[0] + 1] = { 0 }; // Here, count frequency of each element for (int i = 0; i < n1; i++) freq1[array[i]]++; // Shows size of the resultant array int size1 = sqrt(n1); int brr1[size1] = { 0 }, x1, l1 = 0; for (int i = 0; i < n1; i++) { if (freq1[array[i]] > 0) { // Here, store the highest element in // the resultant array brr1[l1] = array[i]; //Used to decrement the frequency of that element freq1[brr1[l1]]--; l1++; for (int j = 0; j < l1; j++) { if (i != j) { // Calculate GCD x1 = __gcd(array[i], brr1[j]); // Decrement GCD value by 2 freq1[x1] -= 2; } } } } printArr(brr1, size1); } // Driver code int main(){ /* int array[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 6, 6, 6, 8, 11, 13, 3, 3}; */ int array[] = { 6, 1, 1, 13}; int n1 = sizeof(array) / sizeof(array[0]); findNumbers(array, n1); return 0; }
आउटपुट
13 6