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

C++ में कई क्वेरीज़ के लिए सीव O(log n) का उपयोग करके अभाज्य गुणनखंडन


इस समस्या में, हमें सीव O(log n) का उपयोग करके कई क्वेरीज़ के लिए अभाज्य गुणनखंडन की गणना करने के लिए एक प्रोग्राम बनाने की आवश्यकता है। 

चूंकि सामान्य विधि O(sqrt(n) ) समय लेती है जो कई क्वेरीज़ के लिए आवश्यक समय को बहुत हद तक बढ़ा देती है।

आइए पहले पुनर्कथन करें,

अभाज्य गुणनखंडन एक संख्या में केवल अभाज्य गुणनखंड शामिल होते हैं, उन अभाज्य गुणनखंडों के कोई उत्पाद नहीं।

एराटोस्थनीज की छलनी (Sieve of Eratosthenes) दी गई सीमा के भीतर सभी अभाज्य संख्याओं को उत्पन्न करने का एक एल्गोरिदम है।

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

समस्या का समाधान उस सबसे छोटे गुणनखंड को खोजकर किया जाता है जो संख्या को विभाजित करता है, उसे गुणनखंड के रूप में सहेजता है और संख्या को गुणनखंड से विभाजित करके अपडेट करता है। यह प्रक्रिया संख्या के विभाजन के बाद 1 बनने तक रिकर्सिवली की जाती है, जिसका अर्थ है कि कोई अन्य गुणनखंड संभव नहीं है।

गणना एराटोस्थनीज की छलनी का उपयोग करके की जाती है जो सबसे छोटे अभाज्य गुणनखंड को खोजने में समय जटिलता को कम करती है।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम

उदाहरण

#include <iostream> using namespace std; int primes[100001]; void sieveOfEratosthenes(int N) {        N+=2;    primes[1] = 1;    for (int i=2; i<N; i++)       primes[i] = i;    for (int i=4; i<N; i+=2)       primes[i] = 2;    for (int i=3; i*i<N; i++) {       if (primes[i] == i) {          for (int j=i*i; j<N; j+=i)             if (primes[j]==j)                primes[j] = i;       }    } } void findPrimeFactors(int num) {        sieveOfEratosthenes(num);    int factor;    while (num != 1) {       factor = primes[num];       cout<<factor<<" ";       num /= factor;    } } int main() {    int N = 45214;    cout<<"Prime factorization of the number "<<N<<" using sieve is ";    findPrimeFactors(N);    return 0; }

आउटपुट

Prime factorization of the number 45214 using sieve is 2 13 37 47

  1. - C++ का उपयोग करके दिए गए एरे के इंडेक्स रेंज [L, R] में बिटवाइज OR के लिए क्वेरी

    इस लेख में, हमें पूर्णांकों का एक एरे दिया गया है। हमें दिए गए रेंज में मौजूद सभी संख्याओं का बिटवाइज OR खोजने का काम सौंपा गया है, उदाहरण के लिए: इनपुट: arr[] = {1, 3, 1, 2, 3, 4}, q[] = {{0, 1}, {3, 5}} आउटपुट: 3 7 1 OR 3 = 3 2 OR 3 OR 4 = 7 इनपुट: arr[] = {1, 2, 3, 4, 5}, q[] = {{0, 4}, {1, 3}}

  1. - C++ का उपयोग करके दिए गए एरे के इंडेक्स रेंज [L, R] में बिटवाइज AND के लिए क्वेरी

    इस लेख में, हमें एक समस्या दी गई है जिसमें हमें पूर्णांकों का एक एरे दिया गया है, और हमें दिए गए रेंज का बिटवाइज AND खोजने का काम सौंपा गया है, उदाहरण के लिए: इनपुट: arr[] = {1, 3, 1, 2, 32, 3, 3, 4, 4}, q[] = {{0, 1}, {3, 5}} आउटपुट: 1 0 0 1 AND 31 = 1 23 AND 34 AND 4 = 00 इनपुट: arr[] = {1, 2, 3

  1. C++ में ट्री में सबट्री के DFS के लिए क्वेरीज़ C++ में ट्री में सबट्री के DFS के लिए क्वेरीज़

    इस समस्या में हमें एक बाइनरी ट्री दिया गया है और हमें एक विशेष नोड से DFS करना है जिसमें हम दिए गए नोड को रूट मानते हैं और उससे DFS करते हैं।उपरोक्त ट्री में मान लें हमें नोड F से DFS करना हैइस ट्यूटोरियल में हम कुछ अपरंपरागत तरीके लागू करने जा रहे हैं ताकि हमारी समय जटिलता काफी कम हो जाए और इस प्रक