Lũy thừa modulo

Xem dạng PDF

Gửi bài giải

Điểm: 100,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Pascal, Python

Cho ba số nguyên dương ~a, b, m~. Hãy tính ~a^b \bmod m~ (phần dư của ~a^b~ khi chia cho ~m~). Vì ~b~ rất lớn nên không thể nhân ~b~ lần; hãy dùng đệ quy chia đôi số mũ: ~a^b = (a^{b/2})^2~ nếu ~b~ chẵn, và ~a^b = (a^{b/2})^2 \times a~ nếu ~b~ lẻ.

Dữ liệu vào

Một dòng gồm ba số nguyên ~a, b, m~ cách nhau bởi dấu cách (~1 \le a \le 10^9~, ~1 \le b \le 10^{18}~, ~1 \le m \le 10^9~).

Kết quả

In ra giá trị ~a^b \bmod m~.

Ví dụ

Ví dụ 1

Input:

2 10 1000

Output:

24

Ví dụ 2

Input:

3 5 7

Output:

5

Giải thích

~2^{10} = 1024~, chia ~1000~ dư ~24~. Mỗi lần gọi đệ quy số mũ giảm một nửa nên chỉ cần khoảng ~60~ lần gọi dù ~b~ lên tới ~10^{18}~. Luôn lấy phần dư sau mỗi phép nhân để không bị tràn số (tích hai số dưới ~10^9~ vẫn nằm trong long long).


Đang tải...