C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で「a」が非常に大きい(a ^ b)%mを検索します


このチュートリアルでは、方程式(a b )を解きます。 )%mここで、aは非常に大きな数です。

方程式(a b )%m =(a%m)*(a%m)...b_times。 %mの値を見つけて、それをb倍することで、問題を解決できます。

問題を解決するための手順を見てみましょう。

  • 番号a、b、およびmを初期化します。

  • a%mを見つける関数を記述します。

    • 番号を0で初期化します。

    • 文字列形式で数値を繰り返し処理します。

    • 数字に最後の桁を追加します。

    • それらを法とする数で数を更新します。

  • %mの値を取得します。

  • b回繰り返すループを作成します。

    • a%mを乗算し、結果をmでモジュロします。

  • 結果を印刷します。

コードを見てみましょう。

#include<bits/stdc++.h>
using namespace std;
unsigned int aModm(string str, unsigned int mod) {
   unsigned int number = 0;
   for (unsigned int i = 0; i < str.length(); i++) {
      number = number * 10 + (str[i] - '0');
      number %= mod;
   }
   return number;
}
unsigned int aPowerBmodM(string &a, unsigned int b, unsigned int m) {
   unsigned int a_mod_m_result = aModm(a, m);
   unsigned int final_result = 1;
   for (unsigned int i = 0; i < b; i++) {
      final_result = (final_result * a_mod_m_result) % m;
   }
   return final_result;
}
int main() {
   string a = "123456789012345678901234567890123";
   unsigned int b = 3, m = 7;
   cout << aPowerBmodM(a, b, m) << endl;
   return 0;
}

出力

上記のプログラムを実行すると、次の結果が得られます。

1

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. C++で数字dを含む番号を検索します

    数字dと上限nがあるとします。 0からnの範囲のdを含むすべての数値を見つける必要があります。したがって、n =20で、桁が3の場合、数値は[3、13]になります。 この問題を解決するために、すべての数値を文字列として受け取り、文字列に数字が含まれている場合は数値が出力され、そうでない場合は無視されます。 例 #include<iostream> using namespace std; int getAllNumWithDigit(int n, int d) {    string str = "";    str +

  2. C++で有理数のLCMを見つける

    ここでは、有理数のLCMを見つける方法を説明します。有理数のリストがあります。リストが{2/7、3 / 14、5 / 3}のようであるとすると、LCMは30/1になります。 この問題を解決するには、すべての分子のLCMを計算し、次にすべての分母のgcdを計算し、次に有理数のLCMを計算する必要があります- $$ LCM =\ frac {LCM \:of \:all \:𝑛𝑢𝑚𝑒𝑟𝑎𝑡𝑜𝑟𝑠} {GCD \:of \:all \:𝑑𝑒𝑛𝑜𝑚𝑖𝑖 例 #include <iostream> #include <vector> #inc