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

C++ में दिए गए समीकरण के हल की संख्या खोजना

समस्या विवरण

इस समस्या में, हमें तीन पूर्णांक मान A, B, C दिए गए हैं। हमारा कार्य दिए गए समीकरण के हल की संख्या खोजना है।

समीकरण

X = B × Sm(X)^A + C

जहां Sm(X), X के अंकों का योग है।

हमें X के उन सभी मानों को गिनने की आवश्यकता है जो उपरोक्त समीकरण को संतुष्ट करते हैं जहां X 1 से 10⁹ के बीच कोई भी संख्या हो सकती है।

उदाहरण

इनपुट

A = 3, B = 6, C = 4

आउटपुट

3

हल का दृष्टिकोण

समस्या को हल करने का एक समाधान X के मानों की संख्या गिनना है। इसके लिए, अंकों का योग एक महत्वपूर्ण भूमिका निभाता है। अधिकतम अंक योग 81 है (अधिकतम मान 999,999,999 के लिए)। और प्रत्येक अंक योग मान के लिए, हम समीकरण का एक हल प्राप्त कर सकते हैं।

हम 1 से 81 तक के प्रत्येक अंक योग मान के लिए मानों को गिनेंगे जो समीकरण को संतुष्ट करते हैं।

एल्गोरिदम

  1. digitSum = 1 से 81 तक लूप करें
  2. प्रत्येक के लिए, solVal = B × (digitSum)^A + C की गणना करें
  3. यदि solVal < 10⁹ और solVal के अंकों का योग digitSum के बराबर है, तो गिनती बढ़ाएं
  4. कुल गिनती वापस करें

C++ कार्यान्वयन

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

int countSolutions(int a, int b, int c) {
    int solutionCount = 0;
    for (int digSum = 1; digSum <= 81; digSum++) {
        long long solVal = 1LL * b * pow(digSum, a) + c;
        if (solVal >= 1e9) continue;
        
        int temp = solVal;
        int sum = 0;
        while (temp) {
            sum += temp % 10;
            temp /= 10;
        }
        
        if (sum == digSum)
            solutionCount++;
    }
    return solutionCount;
}

int main() {
    int a = 3, b = 6, c = 4;
    cout << "समीकरण के हल की संख्या है " << countSolutions(a, b, c);
    return 0;
}

आउटपुट

समीकरण के हल की संख्या है 3

जटिलता विश्लेषण

  • समय जटिलता: O(81 × log₁₀(X)) ≈ O(1) - स्थिर 81 पुनरावृत्तियाँ
  • स्पेस जटिलता: O(1)

मुख्य अंतर्दृष्टि

चूंकि X ≤ 10⁹, अधिकतम अंक योग 9×9 = 81 है। हम केवल 81 संभावित अंक योगों की जांच करते हैं, जिससे समाधान बहुत कुशल होता है।

  1. दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक अनभारित, निदेश रहित ग्राफ दिया गया है। ग्राफ में एक ब्रिज एज वह एज है जिसे हटाने से ग्राफ असंबद्ध हो जाता है। हमें दिए गए ग्राफ में ऐसी एज की संख्या ज्ञात करनी है। ग्राफ में समानांतर एज या सेल्फ-लूप नहीं हैं। उदाहरण के लिए, यदि इनपुट है n = 5, m = 6, edges = {{1

  1. - C++ में LCM और HCF दिए जाने पर दूसरी संख्या ढूंढना

    मान लीजिए हमारे पास एक संख्या A है, और LCM और GCD मान हैं, हमें दूसरी संख्या B ढूंढनी है। यदि A = 5, LCM 25 है, HCF = 4, तो दूसरी संख्या 4 होगी। हम जानते हैं कि -$$A * B = LCM * HCF$$$$B = \frac{LCM * HCF}{A}$$उदाहरण#include <iostream> using namespace std; int anotherNumber(int A, int LCM, int

  1. - C++ प्रोग्राम: दी गई स्ट्रिंग के क्रमचय (Permutations) की संख्या ज्ञात करना

    हम एक स्ट्रिंग के कैरेक्टर्स को अलग-अलग क्रम में व्यवस्थित कर सकते हैं। यहां हम देखेंगे कि दी गई स्ट्रिंग से कितने क्रमचय बनाए जा सकते हैं। हम जानते हैं कि यदि एक स्ट्रिंग abc है। इसमें तीन कैरेक्टर्स हैं; हम उन्हें 3! = 6 अलग-अलग तरीकों से व्यवस्थित कर सकते हैं। इसलिए n कैरेक्टर्स वाली स्ट्रिंग क