Cho ba số nguyên dương A,B và C. Giá trị AB có thể lớn đến mức không thể lưu trực tiếp, nhưng ta chỉ cần phần dư của nó khi chia cho C.
Hãy tính ABmodC.
Input
Một dòng chứa ba số nguyên A,B,C.
Output
In ra một số nguyên duy nhất là ABmodC.
Constraints
1≤A,B,C≤2147483647.
Scoring
Subtask 1 (50 điểm): B≤106.
Subtask 2 (50 điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
7 13 10
Output
7
Giải thích: Ta có 713 tận cùng bằng 7, vì vậy phần dư khi chia cho 10 là 7.
Lời giải tóm tắt
Ý tưởng: Chia đôi số mũ; tính một lần lũy thừa với B/2, bình phương kết quả và nhân thêm A khi B lẻ.
Thuật toán: 1. Giảm A theo mô-đun C. 2. Tính đệ quy một lần cho B/2. 3. Bình phương bằng kiểu trung gian __int128; nếu B lẻ, nhân thêm A. 4. Trả kết quả đã lấy mô-đun.
Chứng minh tính đúng đắn: Xét số mũ b. Với b=0, kết quả là 1 mod C. Giả sử lời gọi cho floor(b/2) đúng. Nếu b chẵn, bình phương kết quả đó cho A^b; nếu b lẻ, nhân thêm A. Lấy mô-đun không làm đổi phần dư, nên quy nạp hoàn tất.
Độ phức tạp: Thời gian O(log B), bộ nhớ ngăn xếp O(log B).