Đồng Dư Là Gì

  -  
I. Phép đồng dư thức

1. Định nghĩa

Đồng dư thức là phxay toán mang số dư của số này lúc phân chia đến số khác, kí hiệu là %\%%. Ví dụ: 5%2=15 \% 2=15%2=1, lúc ấy có thể viết là 5≡15 equiv 15≡1 (mod(mod(hack 2)2)2).

Bạn đang xem: đồng dư là gì

Phnghiền đồng dư thức bao gồm đặc thù phân pân hận so với phép cùng, phép nhân cùng phép trừ, rõ ràng nhỏng sau:

(a+b)(a + b)(a+b) %\%% ccc =<(a= <(a=<(a %\%% c)+(bc) + (bc)+(b %\%% c)>c)>c)> %\%% ccc.- (a−b)(a - b)(a−b) %\%% ccc =<(a= <(a=<(a %\%% c)−(bc) - (bc)−(b %\%% c)>c)>c)> %\%% ccc.(a×b)(a imes b)(a×b) %\%% ccc =<(a= <(a=<(a %\%% c)×(bc) imes (bc)×(b %\%% c)>c)>c)> %\%% ccc.

Riêng đối với phxay phân chia, họ không tồn tại tính chất phân pân hận, cơ mà buộc phải thực hiện một lí tmáu là Nghịch hòn đảo modulo.

2. Nghịch đảo modulo của một số

Như họ những biết ở công tác Tân oán rộng lớn, nghịch đảo của một vài nguyên ổn aaa (kí hiệu a−1a^-1a−1) là số thỏa mãn: a.a−1=1a.a^-1=1a.a−1=1.

Đối cùng với nghịch đảo modulo, ta cũng có tư tưởng tựa như, tuy nhiên là xét trên tập số dư Lúc phân chia mang đến MMM. Nghịch đảo modulo MMM của một vài aaa (cũng kí hiệu a−1a^-1a−1) là số nguyên ổn thỏa mãn: a.a−1≡1 (modomain authority.a^-1equiv1 (modomain authority.a−1≡1 (thủ thuật M)M)M) (Nói bí quyết khác, a−1a^-1a−1 chính là 1afrac1aa1​ %\%% M)M)M). Lấy ví dụ, trường hợp ta lựa chọn M=109+7,a=2M=10^9+7, a=2M=109+7,a=2 thì a−1=500000004a^-1=500000004a−1=500000004.

Không cần cơ hội nào cũng trường thọ a−1a^-1a−1. Chỉ khi GCD(a,M)=1 extGCD(a, M)=1GCD(a,M)=1 thì mới mãi sau a−1a^-1a−một là nghịch đảo modulo MMM của aaa. Để tính nghịch hòn đảo modulo của một số, ta hoàn toàn có thể sử dụng hai giải thuật: Giải thuật Euclid mở rộng hoặc dựa trên định lý Fermat bé dại (áp dụng giải thuật chia nhằm trị tính ab % ca^b \% cab % c).

2.1. Sử dụng giải thuật Euclid mnghỉ ngơi rộng

Nhỏng đã trình bày sinh sống trên, theo giải mã Euclid mở rộng, nếu như GCD(a,M)=1GCDleft(a,M ight)=1GCD(a,M)=1, ta luôn luôn tìm kiếm được xxx cùng yyy thỏa mãn: a.x+M.y=1a.x+M.y=1a.x+M.y=1. Mà M.yM.yM.y phân tách hết cho MMM, do đó pmùi hương trình trnghỉ ngơi thành:

a.x≡1(mod M)a.x equiv 1 ( extmod M)a.x≡1(mod M)

Từ phía trên suy ra xxx đó là a−1a^-1a−1. Tuy nhiên trong lời giải Euclid mở rộng, xxx có thể có quý giá âm, đề xuất ta đang kiểm soát và điều chỉnh một ít nhằm tính được giá trị a−1a^-1a−1 luôn không âm.

long long x;long long modulo_inverse(long long a, long long M) long long gcd = extended_euclid(a, M); if (gcd != 1) return -1; // a và M không nguyên ổn tố cùng mọi người trong nhà, không lâu dài nghịch hòn đảo modulo M của a. return (x % M + M) % M; // Do x rất có thể âm, ta có tác dụng dương nó.

Xem thêm: Bình Luận Cf : Tiến Xinh Trai Chơi Lầy Với Ksp58D, Game Thủ Tiến Xinh Trai

2.2. Tính nghịch hòn đảo modulo bởi định lý Fermat nhỏ

Theo định lý Fermat nhỏ tuổi, ta có: Nếu MMM là số nguyên tố và aaa không phân chia hết mang lại MMM thì:

aM−1≡1 (mod M)a^M-1 equiv 1 ( extmod M)aM−1≡1 (mod M)

xuất xắc nói bí quyết khác:

a×aM−2≡1 (mod M)a imes a^M-2 equiv 1 ( extmod M)a×aM−2≡1 (mod M)

Như vậy tương đương với câu hỏi trường hợp MMM là số nguyên tố với aaa ko chia không còn đến MMM thì aM−2a^M-2aM−2 đó là nghịch đảo modulo MMM của aaa, cũng tương tự cùng với aM−2a^M-2aM−2 %\%% MMM là nghịch hòn đảo modulo MMM của aaa.

long long power_mod(long long a, long long b, long long M) // Tính a^b % M. if (b == 0) return 1; if (b == 1) return a; long long half = power_mod(a, b / 2, M) % M; if (b % 2 == 0) return (half * half) % M; else return (((half * half) % M) * a) % M;long long modulo_inverse(int a, int M) return power_mod(a, M – 2, M);

3. Áp dụng nghịch hòn đảo modulo nhằm tính ab % cfracab \% cba​ % c

Mình vẫn đề cập làm việc mục 111, phxay chia không tồn tại đặc điểm phân phối hận đối với phnghiền đồng dư thức y hệt như những phép cộng, trừ và nhân. Để tính ab % c,fracab \% c,ba​ % c, ta làm cho nhỏng sau:

Tách ab=(a×1b) % c=(a×b−1) % c,fracab = left(a imes frac1b ight) \% c =left(a imes b^-1 ight) \% c,ba​=(a×b1​) % c=(a×b−1) % c, trong những số đó b−1b^-1b−1 là nghịch đảo modulo ccc của bbb.Sau đó áp dụng đặc thù phân phối của phép nhân so với phép đồng dư thức, lúc này phxay chia modulo phát triển thành phnghiền nhân với nghịch đảo modulo. Lưu ý, tùy thuộc theo quý giá ccc cơ mà ta chọn cách search nghịch hòn đảo modulo phù hợp (ccc có là số nguim tố tuyệt không).

Cài đặt:

long long modulo_divide(long long a, long long b, long long c) long long inverse = modulo_inverse(b, c); return (a % c * inverse) % c;

4. Bậc lũy thừa theo modulo NNN (Multiplicative sầu Order)

Xét nhị số nguyên aaa cùng NNN nguyên ổn tố cùng mọi người trong nhà, bậc lũy thừa của aaa theo modulo NNN là số ngulặng dương KKK nhỏ tuổi nhất thỏa mãn: aK≡1 (mod N)a^K equiv 1 ext (hack ext N)aK≡1 (mod N), kí hiệu là ordN(a)ord_N(a)ordN​(a).

Theo định lý Euler, bởi aaa cùng NNN là nhị số nguyên tố cùng nhau bắt buộc aϕ(N)≡1 (mod N),a^phi(N) equiv 1 ( extmod N),aϕ(N)≡1 (mod N), cùng với ϕ(N)phi(N)ϕ(N) là số lượng số ngulặng dương ko vượt quá NNN với nguyên ổn tố cùng nhau cùng với NNN. Mà ϕ(N)≤Nphi(N) le Nϕ(N)≤N, do đó ordN(a)≤Nord_N(a) le NordN​(a)≤N, vậy để kiếm tìm ordN(a)ord_N(a)ordN​(a) chỉ việc săn sóc một vòng lặp tự 111 tới NNN cùng với độ phức hợp O(N−1)O(N - 1)O(N−1).

int find_m_order(int a, int N) int mul = 1; for (int i = 1; i N; ++i) mul = (mul * a) % N; if (mul == 1) return i;

5. Tiêu chuẩn Euler (Euler"s Criterion)

Thứ nhất, ta làm cho quen với quan niệm Thặng dư bậc hai: Một số nguyên qqq được điện thoại tư vấn là thặng dư bậc hai theo modulo NNN nế như đó đồng dư cùng với một số bao gồm pmùi hương theo modulo N,N,N, tức là lâu dài một vài nguyên ổn xxx làm thế nào để cho x2≡q (mod N)x^2 equiv q ( extmod N)x2≡q (mod N).

Trong kim chỉ nan số, tiêu chuẩn chỉnh Euler là 1 trong cách làm dùng để xác minh coi một vài nguim có nên là một trong thặng dư bậc hai theo modulo PPPhường (cùng với PPP. là một vài ngulặng tố) hay không. Theo kia, xét nhì số ngulặng aaa với PPPhường. nguyên ổn tố cùng mọi người trong nhà, trong số ấy PPP. là một vài nguim tố lẻ. Ta có công thức sau:

*

Đối cùng với ngôi trường hòa hợp P=2,P=2,P=2, phần nhiều số nguyên ổn các là thặng dư bậc nhị theo modulo PPP..

Ví dụ, xét P=7Phường = 7P=7, ta gồm a=2a = 2a=2 là thặng dư bậc hai của 7,7,7, vày mãi sau nhì số ngulặng x=3x = 3x=3 với x=4x = 4x=4 thỏa mãn nhu cầu a≡x2 (mod P)a equiv x^2 ext (mod ext P)a≡x2 (mod P).

Xem thêm: Hataraku Ma Vương Đi Làm Phần 2 Vietsub, Ma Vương Đi Làm Phần 2 Vietsub

long long power_mod(long long a, long long b, long long P) if (b == 0) return 1; if (b == 1) return a; long long half = power_mod(a, b / 2, P) % P; if (b % 2 == 0) return (half * half) % P; else return (((half * half) % P) * (a % P)) % P; // Kiểm tra N gồm bắt buộc thặng dư bậc 2 của Phường hay là không.bool check_quadratic_residue(long long N, long long P) if (Phường == 2) return true; else return (power_mod(N, (P - 1) / 2, P) == 1);Trong ngôi trường phù hợp NNN cùng PPPhường thuộc có dạng 4i+3 (i>0)4i + 3 (i > 0)4i+3 (i>0), thì quý giá xxx thỏa mãn x2≡N (mod P)x^2 equiv N ( extmod P)x2≡N (mod P) (nếu như tồn tại) chỉ có thể là: x=± NP+14x=pm ext N^fracP + 14x=± N4P+1​. Dựa vào nhấn xét này ta rất có thể tính nkhô hanh ra quý hiếm xxx. Chứng minc dìm xét nhỏng sau:

Theo định lý Euler, ta có: NP−12 % P=1N^fracPhường - 12 \% Phường = 1N2P−1​ % P=1.Nhân cả hai vế với NNN:

NP+12 % P=N % P (1)N^fracPhường + 12 \% Phường = N \% P (1)N2P+1​ % P=N % P (1)

Lại có: x2≡N (mod P)x^2 equiv N ( extmod P)x2≡N (mod P). ⇔x2≡NP+12 (mod P)Leftrightarrow x^2 equiv N^fracP+12 ( extmod P)⇔x2≡N2P+1​ (mod P) (vày đẳng thức (1)(1)(1)). ⇔x2≡N2i+2 (mod P)Leftrightarrow x^2 equiv N^2i + 2 ( extmod P)⇔x2≡N2i+2 (mod P) (do N=4i+3N=4i + 3N=4i+3). ⇔x≡ Ni+1 (mod P)Leftrightarrow x equiv N^i + 1 ( extmod P)⇔x≡ Ni+1 (mod P). ⇔x≡± NP+14 (mod P)Leftrightarrow x equiv pm N^fracPhường + 14 ( extmod P)⇔x≡± N4P+1​ (mod P) (bởi vì P=4i+3P=4i + 3P=4i+3).

Cài đặt:

int find_quadratic_residue(int N, int P)II. Tài liệu tsi khảo: