Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm (a ^ b)% m trong đó ‘a’ rất lớn trong C ++

Trong hướng dẫn này, chúng ta sẽ giải phương trình (a b )% m trong đó a là một số rất lớn.

Phương trình (a b )% m =(a% m) * (a% m) ... b_times. Chúng ta có thể giải quyết vấn đề bằng cách tìm giá trị của a% m rồi nhân nó với b.

Hãy xem các bước để giải quyết vấn đề.

  • Khởi tạo các số a, b và m.

  • Viết một hàm để tìm a% m.

    • Khởi tạo số bằng 0.

    • Lặp lại số ở định dạng chuỗi.

    • Thêm các chữ số cuối cùng vào số.

    • Cập nhật số với mô-đun số cho chúng.

  • Nhận giá trị của% m.

  • Viết một vòng lặp lặp lại b lần.

    • Nhân a% m và modulo kết quả với m.

  • In kết quả.

Ví dụ

Hãy xem 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;
}

Đầu ra

Nếu bạn thực hiện chương trình trên, bạn sẽ nhận được kết quả sau.

1

Kết luận

Nếu bạn có bất kỳ câu hỏi nào trong hướng dẫn, hãy đề cập đến chúng trong phần bình luận.