Maison > Article > développement back-end > 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.
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.
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 ».
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.
#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; }
Si nous exécutons le code ci-dessus, il générera la sortie suivante
Repeating decimals are: 052631578947368421 Proved Midy'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!