इस समस्या में, हमें Q प्रश्न दिए गए हैं जिनमें दो मान L और R शामिल हैं। हमारा कार्य C++ में दी गई श्रेणियों में अभाज्य संख्याओं के बीच अधिकतम अंतर के लिए प्रश्नों को हल करने के लिए एक प्रोग्राम बनाना है।
समस्या का विवरण:यहाँ, प्रत्येक प्रश्न में, हमें दो मान L और R दिए गए हैं। हमें दी गई सीमा के भीतर अधिकतम अंतर यानी सबसे बड़ी और सबसे छोटी अभाज्य संख्याओं के बीच का अंतर ज्ञात करना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
Q = 2 2 45 14 16 41 0
आउटपुट
स्पष्टीकरण
प्रश्न 1 के लिए, दी गई श्रेणी में सबसे छोटी अभाज्य संख्या 2 है और सबसे बड़ी संख्या 43 है। अंतर 43 - 2 =41 है।
क्वेरी 2 के लिए, दी गई सीमा के भीतर कोई अभाज्य संख्या नहीं है, इसलिए आउटपुट 0 है।
समाधान दृष्टिकोण,
To solve the problem, we will create an array of prime numbers till 100005 which is the given range. Then, we will find the first prime number which is greater than L and the first prime number which is smaller than R . and find their difference.
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <bits/stdc++.h> using namespace std; bool primeNumber[100005] ; void findPrimes(){ memset(primeNumber, true, sizeof(primeNumber)); for (int i = 2; i * i < 100005; i++) { if (primeNumber[i]) { for (int j = i + i; j < 100005; j += i) primeNumber[j] = false; } } } int findPrimeInRange(int L, int R) { int LPrime = 0; int RPrime = 0; for(int i = L; i <= R; i++){ if(primeNumber[i] == true){ LPrime = i; break; } } for(int j = R; j >= L; j--){ if(primeNumber[j] == true){ RPrime = j; break; } } return (RPrime - LPrime); } int main() { int Q = 3; int query[Q][2] = {{4, 15}, {32, 37}, {54, 1100}}; findPrimes(); for (int i = 0; i < Q; i++) cout<<"For query "<<(i+1)<<": The maximum difference between primes numbers is "<<findPrimeInRange(query[i][0], query[i][1])<<"\n"; return 0; }
आउटपुट
For query 1: The maximum difference between primes numbers is 8 For query 2: The maximum difference between primes numbers is 0 For query 3: The maximum difference between primes numbers is 1038