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

C++ में विस्तारित मिडी प्रमेय

मिडीज़ प्रमेय एक कथन है जिसका उपयोग n/p द्वारा दर्शाई गई संख्याओं के दशमलव विस्तार के लिए किया जाता है, जहाँ n कोई भी संख्या है और p एक अभाज्य संख्या है और a/p में सम अवधि के साथ एक दोहराव वाला दशमलव है।

विस्तारित मिडी के प्रमेय में, दोहराए जाने वाले भाग को m अंकों में विभाजित किया जाता है, फिर उनका योग 10m - 1 का गुणज होता है।

विस्तारित मिडी के प्रमेय को दर्शाने वाला कार्यक्रम:

उदाहरण

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

string findDecimalValue(int num, int den) {
   
   string res;
   unordered_map<int, int> mp;
   int rem = num % den;

   while ((rem != 0) && (mp.find(rem) == mp.end())) {

      mp[rem] = res.length();
      rem = rem * 10;
      int part = rem / den;
      res += to_string(part);
      rem = rem % den;
   }
   return (rem == 0) ? "-1" : res.substr(mp[rem]);
}

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

void ExtendedMidysAlgo(string str, int n, int m) {
   
   if (!isPrime(n)) {
      cout<<"Denominator is not prime, thus Extended Midy's theorem is not applicable";
      return;  
   }

   int l = str.length();
   int part1 = 0, part2 = 0;
   if (l % 2 == 0 && l % m == 0) {

      int part[m] = { 0 }, sum = 0, res = 0;
      for (int i = 0; i < l; i++) {
         int var = i / m;
         part[var] = part[var] * 10 + (str[i] - '0');
      }
      for (int i = 0; i < m; i++) {
         sum = sum + part[i];
         cout << part[i] << " ";
      }
      cout << endl;
      res = pow(10, m) - 1;
      if (sum % res == 0)
         cout << "Extended Midy's theorem holds!";      
      else
         cout << "Extended Midy's theorem doesn't hold!";      
   }
   else if (l % 2 != 0) {
      cout << "The repeating decimal is of odd length thus Extended Midy's theorem is not applicable";
   }
   else if (l % m != 0) {
      cout<<" The repeating decimal can not be divided into m digits";
   }
}

// Driver code
int main()
{
   int numr = 1, denr = 17, m = 4;
   string res = findDecimalValue(numr, denr);
   if (res == "-1")
      cout << "The fraction does not have repeating decimal";
   else {
      cout << "Repeating decimal = " << res << endl;
      ExtendedMidysAlgo(res, denr, m);
   }
   return 0;
}

आउटपुट -

Repeating decimal = 0588235294117647
588 2352 9411 7647
Extended Midy's theorem holds!

  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