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

C++ में केवल अभाज्य अंकों (2, 3, 5, 7) से बनी Nवीं संख्या खोजना

समस्या विवरण

इस समस्या में, हमें एक संख्या N दी गई है। हमारा कार्य केवल अभाज्य अंकों (2, 3, 5 और 7) से बनी Nवीं संख्या खोजना है।

केवल अभाज्य अंकों (2, 3, 5, 7) से बनी श्रृंखला है: 2, 3, 5, 7, 22, 23, 25, 27, 32, 33...

उदाहरण

इनपुट: N = 6
आउटपुट: 23

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

समस्या को हल करने का एक सरल दृष्टिकोण दिए गए इंडेक्स पर संख्या खोजना है यानी श्रृंखला का पद खोजना, इसके लिए हम श्रृंखला का अवलोकन करेंगे।

हमारे पास चार अलग-अलग अभाज्य संख्याएं हैं इसलिए बनी श्रृंखला को चार-अंकीय संख्या प्रणाली के रूप में माना जा सकता है। इस संख्या प्रणाली में, हमारे पास लंबाई x की 4ˣ संख्याएं हैं।

अब समस्या को हल करने के लिए, हमारे पास वह श्रृंखला है जिसमें हम उन संख्याओं की लंबाई खोजेंगे जो उन्हें संख्या बनाने में मदद करती हैं। फिर हम Nवीं संख्या गिनेंगे और आवश्यक संख्या प्रिंट करेंगे।

लंबाई का उपयोग करके Nवीं संख्या खोजने के लिए, हम लंबाई (x-1) की पहली संख्या से गिनती करेंगे और फिर इस N को गिनेंगे।

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

#include <iostream> 
#include <cmath> 
using namespace std; 

void findNthNumber(int n) {
    long x = 1;
    long lastNum = 0;
    
    // लंबाई x खोजें जैसे कि लंबाई ≤ x की संख्याओं की संख्या ≥ n हो
    while (true) {
        long currNum = lastNum + pow(4, x);
        if (lastNum < n && currNum >= n)
            break;
        x++;
        lastNum = currNum;
    }
    
    // अब x अंकों की संख्या बनाएं
    for (int i = 1; i <= x; i++) {
        for (long j = 1; j <= 4; j++) {
            if (lastNum + pow(4, x - i) < n) {
                lastNum += pow(4, x - i);
            } else {
                if (j == 1) cout << "2";
                else if (j == 2) cout << "3";
                else if (j == 3) cout << "5";
                else if (j == 4) cout << "7";
                break;
            }
        }
    }
}

int main() {
    int N = 32;
    cout << N << "वीं केवल अभाज्य अंकों से बनी संख्या है ";
    findNthNumber(N);
    return 0;
}

आउटपुट

32वीं केवल अभाज्य अंकों से बनी संख्या है 257

पैटर्न समझ

लंबाईगिनतीसंचयीसंख्याएं
1442, 3, 5, 7
2162022, 23, 25, 27, 32, 33, 35, 37, 52, 53, 55, 57, 72, 73, 75, 77
36484222, 223, ...

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

  • समय जटिलता: O(log₄ N) ≈ O(log N)
  • स्पेस जटिलता: O(1)

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

यह आधार-4 संख्या प्रणाली में परिवर्तित करने के समान है जहां अंक 0,1,2,3 को 2,3,5,7 पर मैप किया जाता है।

  1. - C++ में केवल 4 और 7 अंकों वाली दी गई योग की न्यूनतम संख्या

    समस्या कथनभाग्यशाली संख्याएं वे धनात्मक पूर्णांक हैं जिनके दशमलव प्रतिनिधित्व में केवल भाग्यशाली अंक 4 और 7 होते हैं। कार्य न्यूनतम भाग्यशाली संख्या खोजना है जिसके अंकों का योग n के बराबर हो।उदाहरणयदि योग = 22 तो भाग्यशाली संख्या 4477 है क्योंकि 4 + 4 + 7 + 7 = 22एल्गोरिदम1. यदि योग 4 का गुणक है, तो

  1. - C++ में एक संख्या और उसके अधिकतम अभाज्य फैक्टर का योग ढूंढें

    मान लीजिए हमारे पास एक पॉजिटिव संख्या n है, और हमें N और उसके अधिकतम अभाज्य फैक्टर का योग ढूंढना है। तो जब संख्या 26 है, तो अधिकतम अभाज्य फैक्टर 13 है, इसलिए योग 26 + 13 = 39 होगा। दृष्टिकोण सीधा है। बस अधिकतम अभाज्य फैक्टर ढूंढें, और योग की गणना करें और वापस करें। उदाहरण #include #include usin

  1. - 1 से n तक केवल 0 और 1 अंक वाली संख्याओं की गिनती C++ में

    मान लीजिए, हमारे पास एक संख्या n है। हमारा कार्य 1 से n तक उन पूर्णांकों की संख्या खोजना है, जिनमें केवल 0 और 1 अंक हों। तो यदि n = 15, तो आउटपुट 3 होगा। क्योंकि संख्याएं 1, 10, 11 हैं। इसे हल करने के लिए, हम पुनरावर्ती फ़ंक्शन का उपयोग करके 0 और 1 से पूर्णांक बनाएंगे। निम्नलिखित कोड इसे बेहतर ढंग स