Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหา (a^b)%m โดยที่ 'a' มีขนาดใหญ่มากใน C++


ในบทช่วยสอนนี้ เราจะมาแก้สมการ (a b )%m โดยที่ a เป็นจำนวนที่มาก

สมการ (a b )%m=(a%m)*(a%m)...b_times. เราสามารถแก้ปัญหาได้โดยการหาค่า a%m แล้วคูณ b ด้วย

มาดูขั้นตอนการแก้ปัญหากัน

  • เริ่มต้นตัวเลข a, b และ m

  • เขียนฟังก์ชันเพื่อหา a%m

    • เริ่มต้นตัวเลขด้วย 0

    • วนซ้ำตัวเลขในรูปแบบสตริง

    • เพิ่มตัวเลขสุดท้ายให้กับตัวเลข

    • อัพเดทตัวเลขด้วยตัวเลข modulo

  • รับค่า 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

บทสรุป

หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น