Hướng dẫn cho Exponential problem
Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Authors:
Subtask 1
Vì \(a,m\) khá bé nên ta có thể thực hiện như sau:
- Tính trước các giá trị \(F_1 = a^1,F_2 = a^2, ..., F_m = a^m\) (có thể dùng hàm pow, lũy thừa nhị phân, hoặc chạy for, v.v)
- Sau đó duyệt từ \(1\) đến \(m\) và nhân dồn vào biến kết quả:
result = (result * f[i]) % (1e9 + 7)
Độ phức tạp của subtask là \(\Theta(t\times m)\)
Subtask 2
- Ta nhận thấy rằng: \(a^1 \times a^2 \times ... \times a^m = a^{1+2+...+m}\)
- Ở subtask này ta bắt buộc phải dùng lũy thừa nhị phân thì mới \(AC\) được. Vậy ta sẽ tính trước giá trị \(W=1+2+...+m=m \times \frac{m+1}{2}\) rồi tính \(X=a^{W} \% (10^9+7)\). Đến đây thì ta nhận thấy đây là một bài sử dụng lũy thừa nhị phân cơ bản. Có thể tham khảo bài Module 2 để thực hiện phần này trong \(\Theta (\log (m))\)
Độ phức tạp của subtask này là \(\Theta (t \times \log (m))\)
Bình luận