संख्याओं की श्रेणी को परिभाषित करने के लिए हमें दो नंबर START और END दिए गए हैं। और सकारात्मक संख्याओं की एक सरणी Arr[] भी। लक्ष्य उन सभी संख्याओं को खोजना है जो Arr[] के सभी तत्वों से विभाज्य हैं और [START,END] की सीमा में हैं।
विधि 1 (निष्पक्ष दृष्टिकोण)
हम इसे START से END तक की संख्याओं को पार करके करेंगे और प्रत्येक संख्या के लिए हम जांच करेंगे कि संख्या सरणी के सभी तत्वों से विभाज्य है या नहीं। यदि हाँ, तो वेतन वृद्धि की गणना करें।
विधि 2 (सरणी तत्वों के एलसीएम द्वारा विभाज्यता की जांच करें)
हम सभी ऐरे एलीमेंट का एलसीएम ढूंढेंगे और फिर उस रेंज [START,END] में सभी नंबरों को चेक और गिनेंगे जो उस एलसीएम से पूरी तरह से विभाज्य हैं।
आइए उदाहरणों से समझते हैं।
इनपुट
START=1 END=20 Arr[]= { 2, 4, 8 }
आउटपुट
Numbers that are divisible by all array elements: 2
स्पष्टीकरण
Numbers 8 and 16 are in the range that are divisible by all array elements.
इनपुट
START=100 END=200 Arr[]= { 230, 321, 490, 521 }
आउटपुट
Numbers that are divisible by all array elements: 0
स्पष्टीकरण
No number between 100 to 200 divisible by any array element.
विधि 1 (निष्पक्ष दृष्टिकोण)
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
हम एक पूर्णांक START और END को श्रेणी चर के रूप में लेते हैं।
-
फंक्शन डिविजिबलबीएआर (इंट स्टार्ट, इंट एंड, इंट एआर [], इंट लेन) रेंज वेरिएबल और एरेज़ लेता है और सभी ऐरे एलिमेंट्स द्वारा विभाज्य संख्याओं की गिनती देता है।
-
ऐसी संख्याओं के लिए प्रारंभिक चर गणना को 0 के रूप में लें।
-
परिवर्तनीय ध्वज को 0 के रूप में लें
-
लूप के लिए उपयोग कर संख्याओं की ट्रैवर्स श्रेणी। i=शुरू से i=अंत तक
-
अब प्रत्येक संख्या के लिए num=i, जबकि लूप का उपयोग करके जांचें कि क्या संख्या सभी सरणी तत्वों से विभाज्य है।
-
यदि सभी तत्व पूरी तरह से num को विभाजित करते हैं, तो ध्वज =1 सेट करें।
-
बाहर अगर झंडा =1 वेतन वृद्धि गिनती
-
सभी लूपों के अंत में गिनती की कुल संख्या होगी जो सरणी के सभी तत्वों से विभाज्य है।
-
परिणाम के रूप में गिनती लौटाएं।
उदाहरण
#include <bits/stdc++.h> using namespace std; int divisiblebyArr(int start, int end, int arr[], int len){ int count = 0; int flag=0; int index=0; for (int i = start; i <= end; i++){ int num = i; index=0; while(index<len){ if(num % arr[index++] == 0) { flag=1; } else{ flag=0; break; } } if (flag == 1) { count++; } } return count; } int main(){ int START = 5, END = 20; int Arr[] = {2,4,8 }; int len=sizeof(Arr)/sizeof(Arr[0]); cout <<"Numbers that are divisible by all array elements: "<< divisiblebyArr(START,END,Arr,len); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Numbers that are divisible by all array elements: 2
विधि 2 (एलसीएम दृष्टिकोण)
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
हम एक पूर्णांक START और END को श्रेणी चर के रूप में लेते हैं।
-
फ़ंक्शन getLCM(int a, int b) दो नंबर लेता है और उनमें से पहला नंबर ढूंढकर LCM लौटाता है जो लूप के दौरान दोनों का उपयोग करके विभाज्य है।
-
फ़ंक्शन getLCMArray(int arr[], int n) एक सरणी और उसकी लंबाई इनपुट के रूप में लेता है और सरणी के सभी तत्वों का LCM देता है।
-
getLCM (गिरफ्तारी [0], गिरफ्तारी [1]) के रूप में पहले एलसीएम की गणना करें। उसके बाद लगातार पिछले एलसीएम का एलसीएम खोजें और getLCM(lcm, arr[i]) पर कॉल करके [i] गिरफ्तार करें जहां i=2 से i
-
फंक्शन डिविजिबलबीएआर (इंट स्टार्ट, इंट एंड, इंट एआर [], इंट लेन) रेंज वेरिएबल और एरेज़ लेता है और सभी ऐरे एलिमेंट्स द्वारा विभाज्य संख्याओं की गिनती देता है।
-
ऐसी संख्याओं के लिए प्रारंभिक चर गणना को 0 के रूप में लें।
-
चर lcm को getLCMArray(int arr[], int len) के रूप में लें।
-
लूप के लिए उपयोग कर संख्याओं की ट्रैवर्स श्रेणी। i=शुरू से i=अंत तक
-
अब प्रत्येक संख्या i के लिए जाँच करें कि क्या यह विभाज्य lcm है। अगर सही है, तो इंक्रीमेंट काउंट.
-
सभी लूपों के अंत में गिनती की कुल संख्या होगी जो सरणी के सभी तत्वों से विभाज्य है।
-
परिणाम के रूप में गिनती लौटाएं।
उदाहरण
#include <bits/stdc++.h> using namespace std; int getLCM(int a, int b){ int m; m = (a > b) ? a : b; while(true){ if(m % a == 0 && m % b == 0) return m; m++; } } int getLCMArray(int arr[], int n){ int lcm = getLCM(arr[0], arr[1]); for(int i = 2; i < n; i++){ lcm = getLCM(lcm, arr[i]); } return lcm; } int divisiblebyArr(int start, int end, int arr[], int len){ int count = 0; int flag=0; int lcm=getLCMArray(arr,len); for (int i = start; i <= end; i++){ if(i%lcm==0) { count++; } } return count; } int main(){ int START = 5, END = 20; int Arr[] = {2,4,8 }; int len=sizeof(Arr)/sizeof(Arr[0]); cout <<"Numbers that are divisible by all array elements: "<< divisiblebyArr(START,END,Arr,len); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Numbers that are divisible by all array elements: 2