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()

    • इंट पहले से 0 और इंट लास्ट से 0 तक वैरिएबल बनाएं

    • जांचें कि क्या फ़ंक्शन चेक (वैल) FALSE लौटाता है, तो मिडी का प्रमेय लागू नहीं होता है।

    • ELSE IF len% 2 =0 फिर i से 0 तक के लिए लूप प्रारंभ करें जब तक कि i लेन/2 से कम न हो और पहले * 10 + (str[i] - '0') पर सेट करें और अंतिम से अंतिम * 10 + (str[ लेन / 2 + i] - '0') और प्रिंट ने मिडी के प्रमेय को साबित कर दिया।

  • ELSE, प्रिंट मिडी का प्रमेय लागू नहीं है।

  • समारोह के अंदर Midys_theorem(int a_num, int p_den)

    • पूर्णांक प्रकार मानों को map_val के रूप में मैप करने और मानचित्र को साफ़ करने के लिए मानचित्र प्रकार चर बनाएं।

    • रिमाइंडर को a_num% p_den के रूप में सेट करें।

    • प्रारंभ करें जबकि रिमाइंडर 0 के बराबर नहीं है और map_val.find(reminder) map_val.end() के बराबर है, फिर map_val[reminder] को result.length() पर सेट करें, रिमाइंडर को रिमाइंडर * 10, अस्थायी से रिमाइंडर / p_den, परिणाम के लिए परिणाम + to_string(temp) और रिमाइंडर % p_den को रिमाइंडर।

    • IF शेष =0 जांचें, फिर -1 ELSE लौटाएं, गणना toresult.substr(map_val[reminder])

      सेट करें
    • वापसी की संख्या

  • फ़ंक्शन के अंदर बूल चेक (इंट वैल)

    • लूप फॉर आई से 2 तक शुरू करें जब तक कि वैल/2 से कम न हो जाए। IF 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++ . में रेखा परावर्तन

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

  1. C++ . में विकर्ण ट्रैवर्स II

    मान लीजिए कि हमारे पास nums नामक सूचियों की एक सूची है, हमें अंकों के सभी तत्वों को विकर्ण क्रम में दिखाना होगा। तो, अगर इनपुट पसंद है तो आउटपुट [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16] होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक सरणी रिट परिभाषित करें एक 2डी सरणी को परिभाषित

  1. यूलर प्रमेय को लागू करने के लिए सी ++ कार्यक्रम

    यह एक C++ प्रोग्राम है जो यूलर प्रमेय के कार्यान्वयन को प्रदर्शित करता है। मॉड्यूलर गुणक व्युत्क्रम मौजूद होने के लिए संख्या और मॉड्यूलर को अभाज्य होना चाहिए। एल्गोरिदम Begin Take input to find modular multiplicative inverse Take input as modular value Perform inverse array function: mod