हमें 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