Maison  >  Article  >  développement back-end  >  En C++, le théorème de Midy

En C++, le théorème de Midy

WBOY
WBOYavant
2023-09-11 22:57:021359parcourir

En C++, le théorème de Midy

On obtient la valeur entière a_num qui stockera le numérateur et p_den qui stockera le dénominateur qui devrait être un nombre premier. La tâche consiste à vérifier si l'opération après division de a_num par p_den prouve le théorème de Midy.

Les étapes pour prouver le théorème de Midy sont-

  • Le numérateur d'entrée est a_num et le dénominateur est p_den, qui devrait toujours être un nombre premier.

  • Divisez les nombres. Vérifiez les valeurs décimales répétées.

  • Stockez les valeurs décimales jusqu'à ce qu'elles ne se répètent pas.

  • Vérifiez si les nombres sont des doublons, si c'est le cas, divisez-les en deux

  • Additionnez les deux nombres. Si le résultat est une chaîne de 9, alors cela prouve le théorème de Midy.

Voyons différents scénarios d'entrée et de sortie pour cette situation -

Dans − int a_num = 1 et int p_den = 19

La sortie − La décimale répétitive est : 052631578947368421 Prouvant que Midy théorème

Explication − Suivez les étapes ci-dessus pour vérifier le théorème de Midy, qui est

  • divisé par 1 / 19 = 052631578947368421

  • La valeur décimale répétée est - : 052631578947368421.

  • Coupez le numéro de moitié, soit 052631578 947368421.

  • Ajoutez les deux moitiés ensemble, ce qui donne 052631578 + 947368421 = 999 999 999.

  • Comme on peut le voir, 999 999 999 est une suite de 9 qui prouve le théorème de Midi.

  • ul>

    Input −int a_num = 49, int p_den = 7

    Output − Pas de décimales répétitives

    Explication− Comme nous pouvons le voir, 49/7 ne génère pas de petite valeur numérique , car 49 est exactement divisible par 7. Par conséquent, le résultat est « pas de décimales répétitives ».

    La méthode utilisée dans le programme suivant est la suivante

    • Entrez des valeurs entières telles que int a_num et int p_den.

    • Appelez la fonction Midys_theorem (a_num, p_den) pour prouver le théorème de Midy.

    • Dans la fonction check_Midys()

      • Créez des variables comme int d'abord à 0, int à 0 à la fin

      • Vérifiez si la fonction check(val) renvoie FALSE, puis imprimez le théorème de Midy n'est pas applicable .

      • ELSE IF len % 2 = 0 Ensuite, commencez à boucler FOR de i à 0 jusqu'à ce que i soit inférieur à len/2 et définissez d'abord sur first * 10 + (str[i] - '0') et définissez du dernier au dernier * 10 + (str[len / 2 + i] - '0') et imprimez le théorème de Midy prouvé.

    • ELSE, print Le théorème de Midy ne s'applique pas

    • À l'intérieur de la fonction Midys_theorem(int a_num, int p_den)

      • crée une variable de type map qui mappe la valeur de type entier à map_val et efface le. carte.

      • Définissez le rappel sur a_num % p_den.

      • Commencez égal à 0 lorsqu'il n'y a pas de rappel et map_val.find(reminder) est égal à map_val.end() puis définissez map_val[reminder] sur result.length(), rappel à rappel * 10, temp à rappel /p_den, result Pour result + to_string(temp) et rappelez % p_den.

      • Vérifiez SI reste = 0, puis retournez -1 ELSE, réglez le compte sur result.substr(map_val[reminder])

      • Return count

    • function internal bool check(int val)

      • Commencer la boucle FOR de i à 2 jusqu'à ce que i soit inférieur à val/2. Vérifie IF val % i = 0 et renvoie FALSE, sinon TRUE.

    Exemple

    #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;
    }

    Output

    Si nous exécutons le code ci-dessus, il générera la sortie suivante

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer