Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [An toàn thông tin] Bậc nhân của phần tử trong nhóm Z_p* (Diffie-Hellman)

    Bối cảnh

    Trong trao đổi khóa Diffie-Hellman, tính an toàn phụ thuộc vào cấp (order) của phần tử sinh aaa trong nhóm nhân Zp∗\mathbb{Z}_p^*Zp∗​ (ppp nguyên tố): đó là số nguyên dương nhỏ nhất kkk sao cho

    ak≡1(modp).a^k \equiv 1 \pmod p.ak≡1(modp).

    Cấp của aaa luôn là ước của p−1p-1p−1 (định lý Lagrange / hệ quả của định lý Fermat nhỏ). Nếu cấp của aaa đúng bằng p−1p-1p−1 thì aaa là một căn nguyên thủy (primitive root) modulo ppp, thường dùng làm phần tử sinh công khai ggg trong Diffie-Hellman/ElGamal.

    Đề bài

    Cho số nguyên tố ppp và số nguyên aaa với 1≤a≤p−11 \le a \le p-11≤a≤p−1. Hãy tính cấp của aaa trong Zp∗\mathbb{Z}_p^*Zp∗​, tức số nguyên dương nhỏ nhất kkk sao cho ak≡1(modp)a^k \equiv 1 \pmod pak≡1(modp).

    Ràng buộc

    • 3≤p≤1063 \le p \le 10^63≤p≤106, ppp là số nguyên tố (đề bài đảm bảo).
    • 1≤a≤p−11 \le a \le p - 11≤a≤p−1.

    Ví dụ

    Input:

    7 3
    

    Output:

    6
    

    Giải thích: 31=3, 32=2, 33=6, 34=4, 35=5, 36=1(mod7)3^1=3,\ 3^2=2,\ 3^3=6,\ 3^4=4,\ 3^5=5,\ 3^6=1 \pmod 731=3, 32=2, 33=6, 34=4, 35=5, 36=1(mod7). Vậy cấp của 333 modulo 777 là 666 (và 333 là một căn nguyên thủy modulo 777).

    • Định dạng đầu vào:

      Một dòng chứa hai số nguyên ppp và aaa, cách nhau bởi dấu cách.

    • Định dạng đầu ra:

      Một dòng duy nhất: cấp (bậc nhân) của aaa modulo ppp.

    Ví dụ:

    Đầu vào:

    7 3

    Đầu ra:

    6
    

    Đầu vào:

    13 4

    Đầu ra:

    6
    

    Đang tải editor...