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] Đếm số kẻ nói dối trong phép thử Fermat (số Carmichael)

    Bối cảnh

    Phép thử Fermat kiểm tra "nnn có thể là số nguyên tố hay không" bằng cách chọn một cơ số aaa (1<a<n1 < a < n1<a<n, gcd⁡(a,n)=1\gcd(a,n)=1gcd(a,n)=1) và kiểm tra:

    an−1≡1(modn).a^{n-1} \equiv 1 \pmod n.an−1≡1(modn).

    Nếu điều này sai với một cơ số aaa nào đó, chắc chắn nnn là hợp số (aaa là "nhân chứng" — witness). Tuy nhiên nếu điều này đúng, nnn chưa chắc là số nguyên tố — aaa khi đó được gọi là một kẻ nói dối Fermat (Fermat liar). Đặc biệt, tồn tại các hợp số gọi là số Carmichael (ví dụ 561=3×11×17561 = 3 \times 11 \times 17561=3×11×17) mà mọi cơ số aaa nguyên tố cùng nhau với nnn đều là kẻ nói dối — phép thử Fermat hoàn toàn bị đánh lừa với các số này, đó là lý do các hệ thống mật mã hiện đại dùng Miller-Rabin thay vì Fermat thuần túy.

    Đề bài

    Cho một số nguyên nnn và danh sách kkk cơ số a1,…,aka_1, \ldots, a_ka1​,…,ak​ (với 1<ai<n1 < a_i < n1<ai​<n). Với mỗi cơ số aia_iai​ thỏa gcd⁡(ai,n)=1\gcd(a_i, n) = 1gcd(ai​,n)=1, kiểm tra xem ain−1 mod na_i^{n-1} \bmod nain−1​modn có bằng 111 hay không (tức aia_iai​ có phải kẻ nói dối Fermat đối với nnn hay không — bất kể nnn thực sự nguyên tố hay hợp số). Các cơ số aia_iai​ có gcd⁡(ai,n)≠1\gcd(a_i, n) \neq 1gcd(ai​,n)=1 bị loại, không tính vào kết quả.

    In ra số lượng cơ số aia_iai​ (trong số các cơ số hợp lệ, tức nguyên tố cùng nhau với nnn) thỏa mãn ain−1≡1(modn)a_i^{n-1} \equiv 1 \pmod nain−1​≡1(modn).

    Ràng buộc

    • 3≤n≤1063 \le n \le 10^63≤n≤106.
    • 1≤k≤201 \le k \le 201≤k≤20.
    • 1<ai<n1 < a_i < n1<ai​<n với mọi iii.

    Ví dụ

    Input:

    561 6
    2 5 7 13 17 19
    

    Output:

    5
    

    Giải thích: 561=3×11×17561 = 3 \times 11 \times 17561=3×11×17 là số Carmichael. Trong 6 cơ số, cơ số 171717 có gcd⁡(17,561)=17≠1\gcd(17,561)=17 \neq 1gcd(17,561)=17=1 nên bị loại; 5 cơ số còn lại (2,5,7,13,192,5,7,13,192,5,7,13,19) đều nguyên tố cùng nhau với 561561561 và đều thỏa a560≡1(mod561)a^{560} \equiv 1 \pmod{561}a560≡1(mod561) (tức đều là kẻ nói dối Fermat) — minh họa đúng tính chất của số Carmichael.

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

      Dòng 1: hai số nguyên nnn và kkk. Dòng 2: kkk số nguyên a1,…,aka_1, \ldots, a_ka1​,…,ak​, cách nhau bởi dấu cách.

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

      Một dòng duy nhất: số lượng cơ số hợp lệ (nguyên tố cùng nhau với nnn) thỏa ain−1≡1(modn)a_i^{n-1} \equiv 1 \pmod nain−1​≡1(modn).

    Ví dụ:

    Đầu vào:

    1105 5
    2 3 7 9 11

    Đầu ra:

    5
    

    Đầu vào:

    561 6
    2 5 7 13 17 19

    Đầu ra:

    5
    

    Đang tải editor...