分子を格納する整数値 a_num と、素数であるべき分母を格納する p_den を取得します。タスクは、a_num を p_den で除算した後の演算がミディ定理を証明するかどうかを確認することです。
入力分子は a_num、分母は p_den であり、常に素数である必要があります。
数値を除算します。 10 進数値の繰り返しをチェックします。
10 進数値は繰り返されなくなるまで保存します。
数値が重複しているかどうかを確認し、重複している場合は半分に分割します。
2 つの数値を加算します。出力が 9 の文字列であれば、Midy の定理が証明されます。
この状況のさまざまな入出力シナリオを見てみましょう -
In - int a_num = 1 and int p_den = 19
出力- 繰り返される小数は次のとおりです: 052631578947368421 Midy の定理の証明
説明- Midy の定理、つまり
# を確認するには、上記の手順に従います。入力 −int a_num = 49、int p_den = 7
出力 − 小数の繰り返しなし
説明- ご覧のとおり、49 は 7 で完全に割り切れるため、49/7 は 10 進数値を生成しません。したがって、出力は「小数の繰り返しなし」になります。
次のプログラムで使用するメソッドは次のとおりです。#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
以上がC++ では、Midy の定理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。