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

C++ में न्यूनतम स्क्वायर-फ्री डिवाइजर्स की संख्या


समस्या विवरण

एक इंटीजर N दिया गया है। न्यूनतम स्क्वायर-फ्री डिवाइजर्स की संख्या ढूंढें।

N का फैक्टराइज़ेशन केवल उन डिवाइजर्स से बना होना चाहिए जो पूर्ण वर्ग नहीं हैं।

उदाहरण

यदि N = 24 तो 3 स्क्वायर-फ्री फैक्टर हैं:

फैक्टर = 2 * 6 * 2

एल्गोरिदम

  • N के वर्गमूल तक सभी अभाज्य कारक ढूंढें
  • अब, N के वर्गमूल से कम या बराबर सभी अभाज्य कारकों पर विचार करें और प्रत्येक अभाज्य कारक के लिए N में इसकी अधिकतम घात ढूंढें (जैसे 24 में 2 की अधिकतम घात 3 है)
  • अब, हम जानते हैं कि यदि किसी अभाज्य कारक की N में घात 1 से अधिक है, तो इसे स्वयं के साथ समूहीकृत नहीं किया जा सकता (उदाहरण के लिए 24 में 2 की घात 3 है, इसलिए 2 x 2 = 4 या 2 x 2 x 2 = 8, 24 के फैक्टराइज़ेशन में नहीं हो सकते क्योंकि ये दोनों स्क्वायर-फ्री नहीं हैं) क्योंकि यह किसी पूर्ण वर्ग से विभाज्य होगा
  • लेकिन एक अभाज्य कारक दूसरे अभाज्य कारक के साथ समूहीकृत (केवल एक बार) होकर कभी भी किसी पूर्ण वर्ग से विभाज्य नहीं होगा
  • यह हमें एक अंतर्ज्ञान देता है कि उत्तर N में सभी अभाज्य कारकों की अधिकतम घातों का अधिकतम होगा

उदाहरण

#include <iostream> 
#include <vector> 
#include <cstring> 
using namespace std; 

#define MAX 1005 

void getPrimes(vector<int>& primes) { 
    bool prime[MAX]; 
    memset(prime, true, sizeof(prime)); 
    for (int p = 2; p * p < MAX; p++) { 
        if (prime[p] == true) { 
            for (int i = p * 2; i < MAX; i += p) 
                prime[i] = false; 
        } 
    } 
    for (int p = 2; p < MAX; p++) 
        if (prime[p]) 
            primes.push_back(p); 
} 

int getMinimumSquareFreeDivisors(int n) { 
    vector<int> primes; 
    getPrimes(primes); 
    int maxCnt = 0; 
    for (int i = 0; i < primes.size() && primes[i] * primes[i] <= n; i++) { 
        if (n % primes[i] == 0) { 
            int tmp = 0; 
            while (n % primes[i] == 0) { 
                tmp++; 
                n /= primes[i]; 
            } 
            maxCnt = max(maxCnt, tmp); 
        } 
    } 
    if (maxCnt == 0) 
        maxCnt = 1; 
    return maxCnt; 
} 

int main() { 
    int n = 24; 
    cout << "Minimum number of square free divisors = " << getMinimumSquareFreeDivisors(n) << endl; 
    return 0; 
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को कंपाइल और एक्जीक्यूट करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है:

Minimum number of square free divisors = 3

  1. - न्यूनतम संख्या खोजें जिससे विभाजित करने पर संख्या पूर्ण वर्ग बन जाए C++ में

    मान लीजिए हमारे पास एक संख्या N है। हमें वह न्यूनतम संख्या खोजनी है जो N को विभाजित करके इसे पूर्ण वर्ग बना दे। तो यदि N = 50, तो न्यूनतम संख्या 2 है, क्योंकि 50 / 2 = 25, और 25 एक पूर्ण वर्ग है। एक संख्या पूर्ण वर्ग होती है यदि उसके अभाज्य गुणनखंडों की घात सम हो। तो हम N के अभाज्य गुणनखंड खोजने की

  1. - C++ में न्यूनतम पृष्ठों का आवंटन

    न्यूनतम पृष्ठों का आवंटन एक प्रोग्रामिंग समस्या है। आइए इस समस्या पर विस्तार से चर्चा करते हैं और देखते हैं कि इसका समाधान क्या हो सकता है। कथन आपको n विभिन्न पुस्तकों के पृष्ठों की संख्या दी गई है। साथ ही, m छात्र हैं जिन्हें पुस्तकें आवंटित की जानी हैं। पुस्तकें पृष्ठों की संख्या के आरोही क्रम में

  1. - C++ में एडम नंबर

    एडम नंबर वह संख्या है जिसका वर्ग उसके उल्टे के वर्ग का उल्टा होता है। अवधारणा समझाई गई: किसी संख्या के एडम नंबर होने के लिए, संख्या का वर्ग संख्या के उल्टे के वर्ग का उल्टा होता है। आइए एक उदाहरण लेते हैं, 12 संख्या है। 12 का वर्ग 144 है और 12 का उल्टा 21 है। 12 के उल्टे यानी 21 का वर्ग 441 है। 441,