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

C++ में मिडी का प्रमेय

हमें a_num के रूप में पूर्णांक मान दिए गए हैं जो अंश को संग्रहीत करेगा और p_den जो हर को संग्रहीत करेगा जो एक अभाज्य संख्या होनी चाहिए। कार्य यह जांचना है कि p_den से विभाजित करने पर a_num पर किए गए संचालन मिडी के प्रमेय को साबित करते हैं या नहीं।

मिडी के प्रमेय को साबित करने के चरण हैं:

  • अंश के रूप में a_num और हर के रूप में p_den इनपुट करें जो हमेशा एक अभाज्य मान होना चाहिए।
  • संख्याओं को विभाजित करें। दोहराव वाले दशमलव मानों की जांच करें।
  • दशमलव मानों को तब तक संग्रहीत करें जब तक वे दोहराए नहीं जा रहे।
  • जांचें कि क्या अंक सम हैं, यदि हां, तो उन्हें आधे में विभाजित करें।
  • दोनों संख्याओं को जोड़ें। यदि आउटपुट 9 की एक स्ट्रिंग है तो यह मिडी के प्रमेय को साबित करता है।

विभिन्न इनपुट-आउटपुट परिदृश्य देखते हैं:

इनपुट: int a_num = 1 और int p_den = 19

आउटपुट: दोहराव वाले दशमलव हैं: 052631578947368421 मिडी का प्रमेय साबित हुआ

व्याख्या: मिडी के प्रमेय की जांच के लिए ऊपर बताए गए चरणों का पालन करें:

  • 1 / 19 = 052631578947368421 विभाजित करें।
  • दोहराव वाले दशमलव मान हैं: 052631578947368421।
  • अंकों को आधे में विभाजित करें: 052631578 947368421।
  • दोनों आधों को जोड़ें: 052631578 + 947368421 = 999,999,999।
  • जैसा कि हम देख सकते हैं, 999,999,999 9 की एक स्ट्रिंग है जो मिडी के प्रमेय को साबित करती है।

इनपुट: int a_num = 49, int p_den = 7

आउटपुट: कोई दोहराव वाला दशमलव नहीं

व्याख्या: जैसा कि हम देख सकते हैं 49/7 कोई दशमलव मान उत्पन्न नहीं करता क्योंकि 49 पूरी तरह से 7 से विभाज्य है। इसलिए, आउटपुट कोई दोहराव वाला दशमलव नहीं है।

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण:

  • int a_num और int p_den के रूप में दो पूर्णांक मान इनपुट करें।
  • मिडी के प्रमेय को साबित करने के लिए Midys_theorem(a_num, p_den) फंक्शन कॉल करें।
  • फंक्शन check_Midys() के अंदर:
    • first को 0 और last को 0 के रूप में int वेरिएबल्स बनाएं।
    • जांचें यदि फंक्शन check(val) FALSE लौटाता है तो मिडी का प्रमेय लागू नहीं प्रिंट करें।
    • अन्यथा यदि len % 2 == 0 तो i को 0 से len/2 से कम तक लूप चलाएं और first को first * 10 + (str[i] - '0') और last को last * 10 + (str[len / 2 + i] - '0') पर सेट करें और मिडी का प्रमेय साबित हुआ प्रिंट करें।
  • अन्यथा, मिडी का प्रमेय लागू नहीं प्रिंट करें।
  • फंक्शन Midys_theorem(int a_num, int p_den) के अंदर:
    • पूर्णांक प्रकार के मानों को मैप करने के लिए map_val नामक एक मैप प्रकार का वेरिएबल बनाएं और मैप को क्लियर करें।
    • रिमाइंडर को a_num % p_den पर सेट करें।
    • जब तक रिमाइंडर 0 के बराबर नहीं है AND map_val.find(रिमाइंडर) map_val.end() के बराबर है, तब तक map_val[रिमाइंडर] को result.length() पर सेट करें, रिमाइंडर को रिमाइंडर * 10 पर, temp को रिमाइंडर / p_den पर, result को result + to_string(temp) पर और रिमाइंडर को रिमाइंडर % p_den पर सेट करें।
    • जांचें यदि शेष = 0 तो -1 लौटाएं अन्यथा, count को result.substr(map_val[रिमाइंडर]) पर सेट करें।
    • count लौटाएं।
  • फंक्शन bool check(int val) के अंदर:
    • i को 2 से val/2 से कम तक लूप चलाएं। जांचें यदि val % i == 0 तो FALSE लौटाएं अन्यथा TRUE लौटाएं।

उदाहरण

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

bool check(int val) {
    for(int i = 2; i <= val / 2; i++) {
        if(val % i == 0) {
            return false;
        }
    }
    return true;
}

void check_Midys(string str, int val) {
    int len = str.length();
    int first = 0;
    int last = 0;
    if(!check(val)) {
        cout << "\nNot applicable for Midy's theorem";
    } else if(len % 2 == 0) {
        for(int i = 0; i < len / 2; i++) {
            first = first * 10 + (str[i] - '0');
            last = last * 10 + (str[len / 2 + i] - '0');
        }
        cout << "\nProved Midy's theorem";
    } else {
        cout << "\nNot applicable for Midy's theorem";
    }
}

string Midys_theorem(int a_num, int p_den) {
    string result;
    map<int, int> map_val;
    map_val.clear();
    int reminder = a_num % p_den;
    while((reminder != 0) && (map_val.find(reminder) == map_val.end())) {
        map_val[reminder] = result.length();
        reminder = reminder * 10;
        int temp = reminder / p_den;
        result += to_string(temp);
        reminder = reminder % p_den;
    }
    if(reminder == 0) {
        return "-1";
    } else {
        string count = result.substr(map_val[reminder]);
        return count;
    }
}

int main() {
    int a_num = 1;
    int p_den = 19;
    string result = Midys_theorem(a_num, p_den);
    if(result == "-1") {
        cout << "No Repeating Decimal";
    } else {
        cout << "Repeating decimals are: " << result;
        check_Midys(result, p_den);
    }
    return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा:

Repeating decimals are: 052631578947368421 Proved Midy's theorem
  1. C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें

    समस्या विवरण मान लीजिए हमारे पास 2D तल पर n बिंदु हैं, हमें जांचना है कि क्या y-अक्ष के समानांतर कोई रेखा है जो दिए गए बिंदुओं को सममित रूप से प्रतिबिंबित करती है, दूसरे शब्दों में, जांचें कि क्या कोई ऐसी रेखा मौजूद है जो सभी बिंदुओं को दी गई रेखा पर प्रतिबिंबित करने के बाद मूल बिंदुओं का समुच्चय प

  1. C++ में डायगोनल ट्रैवर्स II C++ में डायगोनल ट्रैवर्स II

    मान लीजिए हमारे पास nums नामक लिस्ट ऑफ लिस्ट है, हमें nums के सभी एलिमेंट्स को डायगोनल क्रम में दिखाना है।इसलिए, यदि इनपुट हैतो आउटपुट होगा [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:एक ऐरे ret परिभाषित करेंएक 2D ऐरे v परिभाषित करेंi := 0 से शुरू करें,

  1. - C++ प्रोग्राम: यूलर थ्योरम इम्प्लीमेंट करना

    यह एक C++ प्रोग्राम है जो यूलर थ्योरम के इम्प्लीमेंटेशन को दर्शाता है। मॉड्यूलर मल्टीप्लिकेटिव इनवर्स के अस्तित्व के लिए संख्या और मॉड्यूलर को कोप्राइम होना चाहिए। एल्गोरिदम Begin मॉड्यूलर मल्टीप्लिकेटिव इनवर्स ढूंढने के लिए इनपुट लें मॉड्यूलर वैल्यू के रूप में इनपुट लें इनवर्स ऐरे फंक