Heim >Backend-Entwicklung >C++ >In C++ der Satz von Midy

In C++ der Satz von Midy

WBOY
WBOYnach vorne
2023-09-11 22:57:021379Durchsuche

In C++ der Satz von Midy

Wir erhalten den ganzzahligen Wert a_num, der den Zähler speichert, und p_den, der den Nenner speichert, der eine Primzahl sein sollte. Die Aufgabe besteht darin, zu prüfen, ob die Operation nach der Division von a_num durch p_den den Midy-Satz beweist.

Die Schritte zum Beweis des Satzes von Midy sind:

  • Der eingegebene Zähler ist a_num und der Nenner ist p_den, was immer eine Primzahl sein sollte.

  • Zahlen dividieren. Suchen Sie nach wiederholten Dezimalwerten.

  • Dezimalwerte speichern, bis sie sich nicht wiederholen.

  • Überprüfen Sie, ob es sich bei den Zahlen um gerade Duplikate handelt. Wenn ja, teilen Sie sie in zwei Hälften.

  • Addieren Sie die beiden Zahlen. Wenn die Ausgabe eine Folge von Neunen ist, dann beweist es den Satz von Midy.

Sehen wir uns verschiedene Ein- und Ausgabeszenarien für diese Situation an –

In − int a_num = 1 und int p_den = 19

Die Ausgabe − Die sich wiederholende Dezimalzahl ist: 052631578947368421 Midy Satz von

Erklärung − Befolgen Sie die obigen Schritte, um den Satz von Midy zu überprüfen, der

  • dividiert durch 1 / 19 = 052631578947368421

  • Der wiederholte Dezimalwert ist -: 052631578947368421.

  • Halbieren Sie die Zahl, also 052631578 947368421.

  • Fügen Sie die beiden Hälften zusammen, was 052631578 + 947368421 = 999.999.999 ergibt.

  • Wie wir sehen können, ist 999.999.999 eine Folge von 9, was den Satz von Midi beweist.

  • ul>

    Eingabe −int a_num = 49, int p_den = 7

    Ausgabe − Keine sich wiederholenden Dezimalstellen

    Erklärung− Wie wir sehen können, erzeugt 49/7 keine kleinen Zahlen Wert , weil 49 genau durch 7 teilbar ist. Daher ist die Ausgabe „keine sich wiederholenden Dezimalstellen“.

    Die im folgenden Programm verwendete Methode lautet wie folgt:

    • Geben Sie ganzzahlige Werte als int a_num und int p_den ein.

    • Nennen Sie die Funktion als Midys_theorem( a_num, p_den), um Midys Theorem zu beweisen.

    • In der Funktion check_Midys()

      • Erstellen Sie Variablen als int zuerst auf 0, int auf 0 am Ende

      • Überprüfen Sie, ob die Funktion check(val) FALSE zurückgibt, und drucken Sie dann aus. Der Satz von Midy ist nicht anwendbar .

      • ELSE IF len % 2 = 0 Dann beginnen Sie mit der FOR-Schleife von i nach 0, bis i kleiner als len/2 ist, und setzen Sie first auf first * 10 + (str[i] - '0') und setzen Sie last auf last * 10 + (str[len / 2 + i] - '0') und drucken Sie den bewiesenen Satz von Midy aus.

    • ELSE, print Midy-Theorem gilt nicht

    • Innerhalb der Funktion erstellt Midys_theorem(int a_num, int p_den)

      • eine Map-Typ-Variable, um den Integer-Typ-Wert zu map_val abzubilden und zu löschen Karte.

      • Erinnerung auf a_num % p_den einstellen.

      • Start gleich 0, wenn keine Erinnerung vorhanden ist und map_val.find(reminder) gleich map_val.end() ist, dann setze map_val[reminder] auf result.length(), Erinnerung zu Erinnerung * 10, temp zu Erinnerung /p_den, result Für result + to_string(temp) und erinnere % p_den.

      • Überprüfen Sie, ob der Rest = 0 ist, geben Sie dann -1 zurück, andernfalls setzen Sie die Anzahl auf result.substr (map_val [reminder]) Überprüft IF val % i = 0 und gibt FALSE zurück, andernfalls TRUE.

      • Beispiel
      #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&#39;s theorem";
         }
         else if(len % 2 == 0){
            for(int i = 0; i < len / 2; i++){
               first = first * 10 + (str[i] - &#39;0&#39;);
               last = last * 10 + (str[len / 2 + i] - &#39;0&#39;);
            }
            cout<<"\nProved Midy&#39;s theorem";
         }
         else{
            cout<<"\nNot applicable for Midy&#39;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;
      }
    • Ausgabe
    • Wenn wir den obigen Code ausführen, wird die folgende Ausgabe generiert

      Repeating decimals are: 052631578947368421
      Proved Midy&#39;s theorem

    Das obige ist der detaillierte Inhalt vonIn C++ der Satz von Midy. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen