हमें अभाज्य संख्याओं की एक सरणी दी गई है, जिन्हें यादृच्छिक क्रम में व्यवस्थित किया गया है। सरणी का आकार N है। लक्ष्य सरणी में सन्निहित अभाज्य संख्याओं का सबसे लंबा अनुक्रम खोजना है।
अभाज्य संख्या वह होती है जिसके केवल दो गुणनखंड होते हैं, 1 और स्वयं संख्या। 1,2,3,5,7,11,13…. अभाज्य संख्याएँ हैं जबकि 4,6,8,9,10….20 अभाज्य संख्याएँ हैं। प्रत्येक अभाज्य संख्या के 2 से अधिक गुणनखंड होते हैं। आइए उदाहरणों से समझते हैं।
इनपुट - एआर [] ={ 1,3,5,2,6,7,13,4,9,10
आउटपुट -3
स्पष्टीकरण -उपरोक्त सरणी में अभाज्य संख्याएँ 3,5,2,7,13 हैं। सन्निहित संख्याएँ 3,5,2 और 7,13 हैं। सबसे लंबे अनुक्रम में 3 संख्याएँ होती हैं। तो इसका उत्तर 4 है।
इनपुट - एआर [] ={ 5,7,17,27,31,21,41}।
आउटपुट -3
स्पष्टीकरण -उपरोक्त सरणी में अभाज्य संख्याएँ 5,7,17,31,41 हैं। सन्निहित संख्याएँ 5,7,17 हैं। सबसे लंबे अनुक्रम में 3 संख्याएँ होती हैं। तो जवाब है 3.
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
पूर्णांक सरणी Arr[] का उपयोग अभाज्य और अभाज्य संख्याओं को संग्रहीत करने के लिए किया जाता है।
-
फ़ंक्शन isprime(int num) का उपयोग यह जांचने के लिए किया जाता है कि संख्या अभाज्य है या नहीं। यदि यह अभाज्य है तो इसका आधा होने तक कोई गुणनखंड नहीं होना चाहिए।
-
अभाज्य संख्याओं के लिए isprime() रिटर्न 1 और यह 0 देता है।
-
फंक्शन primeSubarray(int arr[], int n) दो इनपुट पैरामीटर लेता है। संख्याओं की सरणी ही, इसका आकार। सन्निहित अभाज्य संख्याओं के सबसे लंबे अनुक्रम का आकार देता है।
-
शुरू से एआर [] में संख्याओं को पार करें। अगर गिरफ्तारी [i] गैर-अभाज्य है ( isprime(arr[i])==0 )। फिर सन्निहित अभाज्य संख्याओं की संख्या को 0 के रूप में बदलें।
-
यदि यह अभाज्य है, तो अभाज्य संख्याओं की संख्या बढ़ाएँ। (गैर-अभाज्य होने पर यह 0 से फिर से शुरू होगा)
-
जांचें कि क्या गिनती अब तक अधिकतम है, यदि हां तो इसका मान अधिकतम सी में संग्रहीत करें।
-
परिणाम के रूप में maxC लौटाएं।
उदाहरण
#include <iostream> #include <stdio.h> int isprime(int num){ if (num <= 1) return 0; for (int i = 2; i <= num/2; i++) if (num % i == 0) return 0; return 1; //if both failed then num is prime } int primeSubarray(int arr[], int n){ int count=0; int maxSeq=0; for (int i = 0; i < n; i++) { // if non-prime if (isprime(arr[i]) == 0) count = 0; //if prime else { count++; //printf("\n%d",arr[i]); print prime number subsequence maxSeq=count>maxSeq?count:maxSeq; } } return maxSeq; } int main(){ int arr[] = { 8,4,2,1,3,5,7,9 }; int n =8; printf("Maximum no. of contiguous Prime Numbers in an array: %d", primeSubarray(arr, n)); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Maximum no. of contiguous Prime Numbers in an array : 3