ในบทช่วยสอนนี้ เราจะมาแก้สมการ (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
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น