ホームページ > バックエンド開発 > C++ > C++ では、Midy の定理

C++ では、Midy の定理

WBOY
リリース: 2023-09-11 22:57:02
転載
1371 人が閲覧しました

C++ では、Midy の定理

分子を格納する整数値 a_num と、素数であるべき分母を格納する p_den を取得します。タスクは、a_num を p_den で除算した後の演算がミディ定理を証明するかどうかを確認することです。

Midy の定理を証明する手順は次のとおりです。

  • 入力分子は a_num、分母は p_den であり、常に素数である必要があります。

  • 数値を除算します。 10 進数値の繰り返しをチェックします。

  • 10 進数値は繰り返されなくなるまで保存します。

  • 数値が重複しているかどうかを確認し、重複している場合は半分に分割します。

  • 2 つの数値を加算します。出力が 9 の文字列であれば、Midy の定理が証明されます。

この状況のさまざまな入出力シナリオを見てみましょう -

In - int a_num = 1 and int p_den = 19

出力- 繰り返される小数は次のとおりです: 052631578947368421 Midy の定理の証明

説明- Midy の定理、つまり

# を確認するには、上記の手順に従います。
  • ##Division 1 / 19 = 052631578947368421

  • 繰り返しの 10 進数値は -: 052631578947368421 です。

  • 番号を半分に切ります (052631578 947368421)。

  • 2 つの半分を加算します (052631578 947368421 = 999,999,999)。

  • ご覧のとおり、999,999,999 は 9 の文字列であり、Midi の定理を証明しています。

  • ul>

    入力 −int a_num = 49、int p_den = 7

    出力 − 小数の繰り返しなし

    説明- ご覧のとおり、49 は 7 で完全に割り切れるため、49/7 は 10 進数値を生成しません。したがって、出力は「小数の繰り返しなし」になります。

    次のプログラムで使用するメソッドは次のとおりです。

    • int a_num と int p_den には整数値を入力します。

    • 関数を Midys_theorem(a_num, p_den) として呼び出して、Midy の定理を証明します。

    • #関数 check_Midys()
      • 最初に int を 0 に、最後に int を 0 にする変数を作成します
      • 関数 check(val) が FALSE を返すかどうかを確認し、Midy の定理が当てはまらないことを出力します。
      • ELSE IF len % 2 = 0 次に、i が len/2 未満になるまで FOR のループを i から 0 まで開始し、first を first * 10 (str[i] - '0) に設定します。 ' ) そして last to last * 10 (str[len / 2 i] - '0') を設定し、証明された Midy 定理を出力します。
    • そうしないと、Midy の定理は適用できません。
    • 関数 Midys_theorem(int a_num, int p_den) の内部
      • 整数型の値をmap_valにマップするマップ型変数を作成し、マップをクリアします。
      • リマインダーを a_num % p_den に設定します。
      • リマインダーがなく、map_val.find(reminder) が map_val.end() と等しい場合は、0 から開始し、次に、map_val[reminder] を result.length() に設定します。リマインダーからリマインダー * 10 、温度はリマインダー/p_den、結果は結果 to_string(temp) とリマインダー % p_den です。
      • IF 剰余 = 0 を確認し、-1 ELSE を返し、カウントを に設定します。 result.substr(map_val[reminder])
      • 戻り値
    • 関数内部ブールチェック(int val)
    • #i が val/2 未満になるまで、i から 2 まで FOR をループします。 IF val % i = 0 をチェックして FALSE を返し、それ以外の場合は 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&#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;
      }
      ログイン後にコピー
    出力

    上記のコードを実行すると、次の出力が生成されます

    Repeating decimals are: 052631578947368421
    Proved Midy&#39;s theorem
    ログイン後にコピー

以上がC++ では、Midy の定理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート