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

C++ में वर्ग मुक्त भाजक की न्यूनतम संख्या

समस्या कथन

एक पूर्णांक N दिया है। वर्ग मुक्त भाजक की न्यूनतम संख्या ज्ञात कीजिए।

N के गुणनखंड में केवल वे भाजक शामिल होने चाहिए जो पूर्ण वर्ग नहीं हैं

उदाहरण

यदि N =24 है तो 3 वर्ग मुक्त गुणनखंड इस प्रकार हैं -

गुणनखंड =2 * 6 * 2

एल्गोरिदम

  • N के वर्गमूल तक सभी अभाज्य गुणनखंड ज्ञात करें
  • अब, N के वर्गमूल से कम या उसके बराबर सभी अभाज्य गुणनखंडों पर विचार करें और प्रत्येक अभाज्य गुणनखंड के लिए संख्या N में इसकी अधिकतम घात ज्ञात करें (जैसे 24 में 2 की अधिकतम घात 3 है)
  • अब, हम जानते हैं कि यदि किसी अभाज्य गुणनखंड की घात N में 1 से अधिक है, तो उसे स्वयं के साथ समूहीकृत नहीं किया जा सकता है (उदाहरण के लिए 2 में 24 में 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 विभिन्न पुस्तकों के पृष्ठों की संख्या . दी गई है . साथ ही, मी छात्र . भी हैं जिन्हें किताबें सौंपी जानी हैं। पुस्तकों को पृष्ठों की संख्या के

  1. सी++ एडम नंबर

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