Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में प्रत्येक जोड़े का योग अभाज्य होने वाला सबसे बड़ा उपसमुच्चय


दी गई सरणी से सबसे बड़ा उपसमुच्चय ढूंढना जिसमें प्रत्येक जोड़े का योग एक अभाज्य संख्या हो। अधिकतम तत्व 100000 मानकर, उदाहरण के लिए -

इनपुट: nums[] = { 3, 2, 1, 1 } आउटपुट: आकार = 3, उपसमुच्चय = { 2, 1, 1 } व्याख्या: उपसमुच्चय बन सकते हैं: {3, 2}, {2, 1} और { 2, 1, 1}, {2, 1, 1} में जोड़ी (2,1) का योग 3 है जो अभाज्य है, और जोड़ी (1,1) का योग 2 है जो भी एक अभाज्य संख्या है। इनपुट: nums[] = {1, 4, 3, 2} आउटपुट: आकार = 2, उपसमुच्चय = {1, 4} व्याख्या: उपसमुच्चय बन सकते हैं: {1, 4}, {4, 3}, और {3, 2} सभी आकार 2 के हैं इसलिए हम कोई भी उपसमुच्चय ले सकते हैं जैसे 1 + 4 = 5 जो एक अभाज्य संख्या है।

समाधान खोजने का दृष्टिकोण

यह जांचने के लिए कि क्या जोड़ा अभाज्य है, पहले हमें जांचना होगा कि इसका योग विषम है या सम क्योंकि सम संख्याएं 2 को छोड़कर अभाज्य नहीं होती हैं। और दो संख्याओं का योग सम हो सकता है यदि दोनों संख्याएं या तो विषम हैं या सम।

इस समस्या में, हम तीन संख्याएं लेंगे, x, y, और z, जहां किन्हीं दो संख्याओं को या तो सम या विषम होना चाहिए। फिर हम इस उपसमुच्चय को अभाज्य योग जोड़े के लिए चेक करेंगे, और यह संभव हो सकता है यदि,

  • उपसमुच्चय में कुछ 1 की संख्या और कुछ अन्य संख्याएं हैं जिनमें NUM + 1 अभाज्य होना चाहिए।

  • या यदि उपसमुच्चय में केवल दो संख्याएं हैं जिनका योग अभाज्य है।

उदाहरण

  #include <bits/stdc++.h> using namespace std; #define M 100001 bool check_prime[M] = { 0 }; int sieve_of_eratosthenes(){     for (int p = 2; p * p < M; p++){        // यदि चिह्नित नहीं है तो चिह्नित करें         if (check_prime[p] == 0){             // p के सभी गुणकों को अपडेट करें             for (int i = p * 2; i < M; i += p)                 check_prime[i] = 1;         }     }     return 0; } int main(){     sieve_of_eratosthenes();     int nums[] = {  3, 2, 1, 1};     int n = sizeof(nums) / sizeof(nums[0]);         int ones = 0;     for (int i = 0; i < n; i++)         if (nums[i] == 1)             ones++;     // यदि 1 मौजूद हैं और     // 0 से बड़े तत्व भी मौजूद हैं     if (ones > 0){         for (int i = 0; i < n; i++){             //जांचना कि num + 1 अभाज्य है या नहीं             if ((nums[i] != 1) and (check_prime[nums[i] + 1] == 0)){                 cout << ones + 1 << endl;                 // nums[i] के साथ मौजूद सभी 1 प्रिंट करना                 for (int j = 0; j < ones; j++)                 cout << 1 << " ";                 cout << nums[i] << endl;                 return 0;             }         }     }     // यदि उपसमुच्चय में केवल 1 हैं     if (ones >= 2){         cout << ones << endl;         for (int i = 0; i < ones; i++)             cout << 1 << " ";         cout << endl;         return 0;     }     // यदि कोई 1 मौजूद नहीं है।     for (int i = 0; i < n; i++){         for (int j = i + 1; j < n; j++){             // अभाज्य योग वाले पूर्णांक जोड़े की खोज।             if (check_prime[nums[i] + nums[j]] == 0){                 cout << 2 << endl;                 cout << nums[i] << " " << nums[j] << endl;                 return 0;             }         }     } // यदि सरणी में केवल एक तत्व मौजूद है।     cout << -1 << endl;     return 0; }

आउटपुट

3 1 1 2

उपरोक्त कोड की व्याख्या

  • सबसे पहले हम सरणी में 1 की संख्या चेक कर रहे हैं।

  • यदि यह 0 से अधिक है, तो सरणी को पार करें और 1 के अलावा प्रत्येक तत्व की जांच करें कि क्या nums[i] + 1 अभाज्य है; यदि हां, तो उपसमुच्चय के आकार के रूप में (ones + 1) की कुल संख्या प्रिंट करें और संख्या के साथ सभी 1।

  • यदि दी गई सरणी में केवल 1 हैं, तो सभी 1 प्रिंट करें क्योंकि सभी जोड़ों का योग 2 (अभाज्य) होगा।

  • यदि कोई 1 मौजूद नहीं है, तो सरणी में प्रत्येक जोड़े की जांच करें जिसका योग अभाज्य हो।

  • अन्यथा -1 प्रिंट करें।

निष्कर्ष

इस ट्यूटोरियल में, हमने एक समस्या पर चर्चा की जहां हमें दी गई सरणी से सबसे बड़ा उपसमुच्चय ढूंढना है जिसमें प्रत्येक जोड़े का योग अभाज्य हो। हमने इस समस्या को हल करने के लिए एराटोस्थनीज की छलनी की मदद से और सरणी में 1 की संख्या चेक करके दृष्टिकोण पर चर्चा की। हमने इस समस्या के लिए C++ प्रोग्राम भी चर्चा की जिसे हम C, Java, Python आदि प्रोग्रामिंग भाषाओं में कर सकते हैं। आशा है आपको यह ट्यूटोरियल उपयोगी लगा होगा।

  1. संतुलित BST में दिए गए योग वाली जोड़ी खोजें C++ में संतुलित BST में दिए गए योग वाली जोड़ी खोजें C++ में

    मान लीजिए हमारे पास एक संतुलित बाइनरी सर्च ट्री (BST) और एक लक्ष्य योग है, हमें एक ऐसी विधि परिभाषित करनी है जो जांचे कि क्या इसमें कोई ऐसी जोड़ी मौजूद है जिसका योग लक्ष्य योग के बराबर हो। ध्यान रखें कि बाइनरी सर्च ट्री अपरिवर्तनीय (immutable) है। उदाहरण के लिए, यदि इनपुट इस तरह का है: तो आउटपुट हो

  1. - C++ में अभाज्य स्ट्रिंग (Prime String)

    इस समस्या में, हमें एक स्ट्रिंग दी गई है। हमारा कार्य हां / नहीं प्रिंट करना है, यह इस आधार पर कि उस स्ट्रिंग के वर्णों के ASCII मानों का योग अभाज्य है या नहीं। ASCII मान वर्ण एन्कोडिंग होते हैं। अभाज्य संख्या वह संख्या है जो केवल स्वयं और 1 से विभाज्य होती है। आइए एक उदाहरण से समझते हैं: इनपुट: स्

  1. - C++ में दिए गए योग के साथ अधिकतम आकार का सबसेट

    समस्या कथनN तत्वों का एक एरे और योग दिया गया है। हमें उस अधिकतम आकार के सबसेट का आकार ढूंढना है जिसका योग दिए गए योग के बराबर हो।उदाहरणयदि इनपुट एरे arr = { 2, 3, 5, 10 } है और योग = 20 है तो आउटपुट 4 होगा क्योंकि −2 + 3 + 5 + 10 = 20 जो दिए गए योग के बराबर है।एल्गोरिदमहम इस समस्या को हल करने