Với p nhỏ, phép duyệt tuần tự (brute force) đủ để giải bài toán logarit rời rạc. Nhưng khi p lớn tới cỡ 1012, cách duyệt O(p) sẽ quá chậm; cần thuật toán Baby-step Giant-step (BSGS) chạy trong O(p).
Cho số nguyên tố p, cơ số g (1≤g≤p−1) và giá trị h (0≤h≤p−1), hãy tìm số nguyên x nhỏ nhất thỏa 0≤x≤p−2 sao cho:
gxmodp=h
Nếu không tồn tại x nào trong khoảng trên thỏa mãn, in ra −1.
Ví dụ: p=23, g=5, h=8: đáp án là 6 vì 56mod23=8.
In ra T dòng, dòng thứ i là số nguyên x nhỏ nhất thỏa gxmodp=h (0≤x≤p−2), hoặc −1 nếu không tồn tại. Thuật toán duyệt tuần tự đơn giản sẽ không đủ nhanh với p lớn.
Ví dụ:
Đầu vào:
1
23 5 8
Đầu ra:
6
Đầu vào:
1
7 3 1
Đầu ra:
0
Đang tải editor...