在 C++ 中求 (a^b)%m,其中 ‘a’ 非常大


在本教程中,我們將解決方程 (ab)%m,其中 a 是一個非常大的數字。

方程 (ab)%m=(a%m)*(a%m)...b_times。我們可以透過找到 a%m 的值,然後將其乘以 b 次來解決問題。

讓我們看看解決問題的步驟。

  • 初始化數字 a、b 和 m。

  • 編寫一個函式來查詢 a%m。

    • 將數字初始化為 0。

    • 迭代字串格式的數字。

    • 將最後一位數字新增到數字中。

    • 使用數字模 m 更新數字。

  • 獲取 a%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

結論

如果您在本教程中有任何疑問,請在評論區提出。

更新於: 2021年2月1日

171 次檢視

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告

© . All rights reserved.