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