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
結論
チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。
-
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 +
-
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