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] Thuật toán Euclid mở rộng

    Thuật toán Euclid mở rộng

    Euclid mở rộng tìm bộ hệ số Bézout (x,y)(x,y)(x,y) thỏa:

    a⋅x+b⋅y=gcd⁡(a,b)a\cdot x + b\cdot y = \gcd(a,b)a⋅x+b⋅y=gcd(a,b)

    Đây là công cụ chuẩn để tính nghịch đảo modular với modulo bất kỳ.

    Cho aaa, bbb, in ba số ggg, xxx, yyy với g=gcd⁡(a,b)g=\gcd(a,b)g=gcd(a,b) và ax+by=gax+by=gax+by=g. Để kết quả duy nhất, hãy dùng đúng công thức đệ quy chuẩn:

    • extgcd(a,0)=(a,1,0)\text{extgcd}(a,0) = (a,1,0)extgcd(a,0)=(a,1,0);
    • extgcd(a,b)=(g,y1,x1−⌊a/b⌋y1)\text{extgcd}(a,b) = (g, y_1, x_1 - \lfloor a/b\rfloor y_1)extgcd(a,b)=(g,y1​,x1​−⌊a/b⌋y1​) với (g,x1,y1)=extgcd(b,a mod b)(g,x_1,y_1)=\text{extgcd}(b, a\bmod b)(g,x1​,y1​)=extgcd(b,amodb).

    Ví dụ

    extgcd(30,12)=(6,1,−2)\text{extgcd}(30,12)=(6,1,-2)extgcd(30,12)=(6,1,−2) vì 30⋅1+12⋅(−2)=630\cdot1+12\cdot(-2)=630⋅1+12⋅(−2)=6.

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

      Một dòng gồm hai số nguyên dương aaa, bbb.

    • Ràng buộc đầu vào:

      1≤a,b<10181 \le a, b < 10^{18}1≤a,b<1018.

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

      Ba số ggg, xxx, yyy cách nhau bởi dấu cách.

    Ví dụ:

    Đầu vào:

    30 12
    

    Đầu ra:

    6 1 -2

    Giải thích:

    30·1+12·(-2)=30-24=6=gcd(30,12).

    Đang tải editor...