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

C++ में वह पूर्णांक ढूंढें जो सरणी के अधिकतम तत्वों को विभाजित करता है


इस समस्या में, हमें n पूर्णांकों की एक सरणी arr[] दी गई है।

हमारा कार्य है वह पूर्णांक ढूंढना जो सरणी के अधिकतम तत्वों को विभाजित करता है।

समस्या विवरण: हमें एक संख्या p ढूंढनी है जो सरणी के अधिकतम तत्वों को विभाजित कर सके। यदि एक से अधिक ऐसा तत्व है तो हम छोटे वाले को वापस करेंगे।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट: arr[] = {4, 5, 6, 7, 8}

आउटपुट: 2

व्याख्या:

तत्व 2, {4, 6, 8} को विभाजित करता है।

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

समस्या का एक सरल समाधान सरणी के माध्यम से लूप करना और फिर सरणी के प्रत्येक तत्व के लिए, सरणी के प्रत्येक तत्व को 1 से k तक के तत्वों से विभाजित करना है। और वह तत्व वापस करना जो सरणी के अधिकतम तत्वों को विभाजित करता है।

दूसरा दृष्टिकोण इस तथ्य का उपयोग करके समस्या को हल करना है कि सरणी के सभी तत्व अभाज्य गुणनखंडों से विभाजित होते हैं।

हम प्रत्येक अभाज्य संख्या से विभाजन की आवृत्ति संग्रहीत करेंगे और फिर अधिकतम आवृत्ति वाले गुणनखंड को वापस करेंगे। हम अभाज्य संख्याओं और उनकी आवृत्तियों को हैश में संग्रहीत करते हैं।

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;

#define MAXN 100001
int primes[MAXN];

void findPrimeSieve() {
    primes[1] = 1;
    for (int i = 2; i < MAXN; i++)
        primes[i] = i;
    for (int i = 4; i < MAXN; i += 2)
        primes[i] = 2;
    for (int i = 3; i * i < MAXN; i++) {
        if (primes[i] == i) {
            for (int j = i * i; j < MAXN; j += i)
                if (primes[j] == j)
                    primes[j] = i;
        }
    }
}

vector<int> findFactors(int num) {
    vector<int> factors;
    while (num != 1) {
        int temp = primes[num];
        factors.push_back(temp);
        while (num % temp == 0)
            num = num / temp;
    }
    return factors;
}

int findmaxDivElement(int arr[], int n) {
    findPrimeSieve();
    map<int, int> factorFreq;
    for (int i = 0; i < n; ++i) {
        vector<int> p = findFactors(arr[i]);
        for (int i = 0; i < p.size(); i++)
            factorFreq[p[i]]++;
    }
    int cnt = 0, ans = 1e+7;
    for (auto itr : factorFreq) {
        if (itr.second >= cnt) {
            cnt = itr.second;
            ans > itr.first ? ans = itr.first : ans = ans;
        }
    }
    return ans;
}

int main() {
    int arr[] = { 4, 5, 6, 7, 8 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout<<"The number that divides the maximum elements of the array is "<<findmaxDivElement(arr, n);
    return 0;
}

आउटपुट

The number that divides the maximum elements of the array is 2

  1. - C++ में सरणी को अच्छा बनाने के लिए हटाए जाने वाले न्यूनतम तत्व

    समस्या कथन एक सरणी arr दी गई है, सरणी को अच्छा बनाने के लिए हटाए जाने वाले न्यूनतम तत्वों की संख्या ढूंढें। एक अनुक्रम a1, a2, a3...an को अच्छा कहा जाता है यदि प्रत्येक तत्व a[i] के लिए, एक तत्व a[j] (i ≠ j) मौजूद होता है जैसे कि a[i] + a[j] 2 की घात हो। arr1[] = {1, 1, 7, 1, 5} उपरोक्त सरणी में यदि

  1. - C++ में सरणी में एक संख्या की फ्रीक्वेंसी ज्ञात करना

    मान लीजिए हमारे पास एक सरणी है। इसमें n अलग-अलग तत्व हैं। हमें सरणी में एक तत्व की फ्रीक्वेंसी जांचनी है। मान लीजिए A = [5, 12, 26, 5, 3, 4, 15, 5, 8, 4], यदि हम 5 की फ्रीक्वेंसी ढूंढने की कोशिश करते हैं, तो यह 3 होगी। इसे हल करने के लिए, हम सरणी को बाएं से स्कैन करेंगे, यदि तत्व दी गई संख्या के सम

  1. - C++ का उपयोग करके सरणी में ऐसा तत्व खोजें जिससे सभी तत्व विभाज्य हों

    मान लीजिए हमारे पास कुछ तत्वों के साथ एक सरणी A है। हमें A से एक ऐसा तत्व ढूंढना है जिससे सभी तत्व इससे विभाज्य हों। मान लीजिए A = [15, 21, 69, 33, 3, 72, 81] है, तो तत्व 3 होगा, क्योंकि सभी संख्याएं 3 से विभाज्य हैं। इस समस्या को हल करने के लिए, हम A में सबसे छोटी संख्या लेंगे, फिर जांचेंगे कि क्य