Bài giảng Giải thuật nâng cao - Một số giải thuật trên số - Ngô Quốc Việt
Tóm tắt Bài giảng Giải thuật nâng cao - Một số giải thuật trên số - Ngô Quốc Việt: ... thì 𝑎 ≡ 𝑏 (𝑚𝑜𝑑 𝑚) Giải thuật nâng cao-Một số giải thuật trên số 1. Start with (a,b) such that a >= b 2. Take reminder r of a/b 3. Set a := b, b := r so that a >= b 4. Repeat until b = 0 Chứng minh định lý Bézout Định lý Bézout: 𝑎 ≥ 𝑏 ≥ 0 𝑠, 𝑡: gcd (𝑎, 𝑏) = 𝑠𝑎...các số nguyên tố nhỏ hơn x xấp xỉ bằng x/ln(x) (in 1792 by Gauss at 15...) • Cơ hội để số x là số nguyên tố xấp xỉ bằng: 1/ln(x). • Ví dụ: xét số nguyên tố có 200 chữ số • 𝑙𝑛 10200 ≈ 460 • Trong 460 số nguyên có 200 chữ số thì có có thể có 1 số nguyên tố. • Manindra Agrawal et al (20...)); x=x+r(i)*M(i)*IM(i); end display('Value of x: '); x=mod(x,CM); else display('Length of r and p matrices must be same'); end Giải thuật nâng cao-Một số giải thuật trên số Định lý phần dư Trung hoa-MATLAB function y=invmodn(x,p) n=eulerphi(p); % Compute Euler's totient function...
= 8 x3 = 7x2+4 = 7*8+4 = 60 mod 9 = 6 x4 = 7x3+4 = 7*6+4 = 46 mod 9 = 1 x5 = 7x4+4 = 7*1+4 = 11 mod 9 = 2 x6 = 7x5+4 = 7*2+4 = 18 mod 9 = 0 x7 = 7x6+4 = 7*0+4 = 4 mod 9 = 4 x8 = 7x7+4 = 7*4+4 = 32 mod 9 = 5 • Các giá trị 𝑚 = 232 − 1, 𝑎 = 75 = 16,807, 𝑐 = 0 thường được dùng để sinh số ngẫu nhiên • Yêu cầu: anh/chị hãy viết hàm sinh ra số ngẫu nhiên Giải thuật nâng cao-Một số giải thuật trên số The Caesar cipher • Julius Caesar sử dụng thủ tục sau để mã hóa messages • Hàm f để mã hóa chữ được định nghĩa như sau: f(p) = (p+3) mod 26 • Với p là a letter (0 là A, 1 là B, 25 là Z, etc.) • Giải mã: f-1(p) = (p-3) mod 26 • Thủ tục này được gọi là substitution cipher Giải thuật nâng cao-Một số giải thuật trên số Mã hóa Caesar • Mã hóa “go cavaliers” • Chuyển thành số: g = 6, o = 14, etc. • Chuỗi số: 6, 14, 2, 0, 21, 0, 11, 8, 4, 17, 18 • Áp dụng cipher cho từng số: f(6) = 9, f(14) = 17, etc. • Chuỗi đã mã: 9, 17, 5, 3, 24, 3, 14, 11, 7, 20, 21 • Chuyển số thành chuỗi: 9 = j, 17 = r, etc. • Chuỗi chữ: jr wfdydolhuv • Giải mã “jr wfdydolhuv” • Chuyển thành số: j = 9, r = 17, etc. • Chuỗi số: 9, 17, 5, 3, 24, 3, 14, 11, 7, 20, 21 • Áp dụng cipher cho từng số : f-1(9) = 6, f-1(17) = 14, etc. • Chuỗi số đã giải mã: 6, 14, 2, 0, 21, 0, 11, 8, 4, 17, 18 • Chuyển số thành chuỗi: 6 = g, 14 = 0, etc. • Chuỗi gốc: “go cavaliers” Giải thuật nâng cao-Một số giải thuật trên số Số nguyên tố và ước chung lớn nhất • Số nguyên dương p được gọi là số nguyên tố nếu chỉ chia hết cho chính nó và 1. Ngược lại gọi là số hợp nguyên (composite integer). • Chú ý: 1 không phải là số nguyên tố Giải thuật nâng cao-Một số giải thuật trên số Số nguyên tố và ước chung lớn nhất • Định lý số học cơ bản: mọi số nguyên đều có thể biểu diễn duy nhất bởi tích của các số nguyên tố. • Định lý: số hợp nguyên n có số chia nguyên tố nhỏ hơn hoặc bằng 𝒏. • Suy ra: n là số nguyên tố nếu không chia hết cho bất kỳ số nguyên tố nào nhỏ hơn hay bằng 𝑛. • Định nghĩa: hai số nguyên a, b là nguyên tố cùng nhau nếu ước chung lớn nhất (GCD) của chúng là 1. • Định nghĩa: Các số 𝑎1, 𝑎2, , 𝑎𝑛 là đôi một nguyên tố cùng nhau nếu: 𝑔𝑐 𝑑 𝑎𝑖 , 𝑎𝑗 = 1, 1 ≤ 𝑖 < 𝑗 ≤ 𝑛 Giải thuật nâng cao-Một số giải thuật trên số Một số định lý • Định lý Bézout : • ∀𝑎, 𝑏 𝑖𝑛𝑡𝑒𝑔𝑒𝑟𝑠, 𝑎, 𝑏 > 0: ∃𝑠, 𝑡: gcd 𝑎, 𝑏 = 𝑠𝑎 + 𝑡𝑏 • Bổ đề 1: • ∀𝑎, 𝑏, 𝑐 > 0: gcd 𝑎, 𝑏 = 1 𝑎𝑛𝑑 𝑎 | 𝑏𝑐 thì 𝑎 | 𝑐. • Bổ đề 2: • Nếu p là số nguyên tố và 𝑝 | 𝑎1𝑎2𝑎𝑛 thì ∃𝑖: 𝑝 | 𝑎𝑖 • Định lý 2: • Nếu 𝑎𝑐 ≡ 𝑏𝑐 (𝑚𝑜𝑑 𝑚) và gcd 𝑐,𝑚 = 1 thì 𝑎 ≡ 𝑏 (𝑚𝑜𝑑 𝑚) Giải thuật nâng cao-Một số giải thuật trên số 1. Start with (a,b) such that a >= b 2. Take reminder r of a/b 3. Set a := b, b := r so that a >= b 4. Repeat until b = 0 Chứng minh định lý Bézout Định lý Bézout: 𝑎 ≥ 𝑏 ≥ 0 𝑠, 𝑡: gcd (𝑎, 𝑏) = 𝑠𝑎 + 𝑡𝑏 Chứng minh Bổ đề Bézout là hệ quả của Euclidean division. 𝑎 = 𝑏𝑥1 + 𝑟1, 0 < 𝑟1 < 𝑏 , gcd 𝑎, 𝑏 = gcd (𝑏, 𝑟1) Giải thuật nâng cao-Một số giải thuật trên số Chứng minh định lý Bézout 𝑎 = 𝑏𝑥1 + 𝑟1, 0 < 𝑟1 < 𝑏 , gcd 𝑎, 𝑏 = gcd (𝑏, 𝑐) 𝑏 = 𝑟1𝑥2 + 𝑟2, 0 < 𝑟2 < 𝑟1 ⋮ 𝑟𝑛−1 = 𝑟𝑛𝑥𝑛+1 + 𝑟𝑛+1, 0 < 𝑟𝑛+1 < 𝑟𝑛, 𝑟𝑛 = 𝑟𝑛+1𝑟𝑛+2 • 𝑟𝑛+1 là phần dư khác zero cuối cùng trong tiến trình trên. 𝑟𝑛+1 là linear combination của 𝑟𝑛 và 𝑟𝑛−1, 𝑟𝑛 là linear combination của 𝑟𝑛−1 và 𝑟𝑛−2, •⋯ • 𝑟𝑛+1 là linear combination của a và b và là gcd của chúng. Giải thuật nâng cao-Một số giải thuật trên số Giải thuật nâng cao-Một số giải thuật trên số Ví dụ về định lý Bézout gcd(252,198) = 18. Biểu diễn 18 là kết hợp tuyến tính của 252 và 198. Sử dụng divisions theo Euclid Algorithm: 252 = 1 198 + 54 (252 mod 198 = 54) 198 = 3 54 + 36 (198 mod 54 = 36) 54 = 1 36 +18 etc. 36 = 2 18 Vì, 18 = 54 - 1 36 (3rd equation) 36 = 198 – 3 54 (2th equation) Do đó 18 = 54 - 1 (198 – 3 54) = 4 54 – 1 198 Nhưng 54 = 252 - 1 198; thay thế 54 trong biểu thức này : 18 = 4 (252 - 1 198) - 1 198 = 4 252 – 5 198 gcd(252,198) = gcd(198,54) = gcd(54,36) = gcd(36,18) = gcd(18,0) = 18 Chứng minh Bổ đề 1 Bổ đề 1: ∀𝑎, 𝑏, 𝑐 > 0: gcd 𝑎, 𝑏 = 1 & 𝑎 | 𝑏𝑐 thì 𝑎 | 𝑐. Theo định lý Bézout: 𝑠, 𝑡: 𝑠𝑎 + 𝑡𝑏 = 1. Nhân hai vế với c, c𝑠𝑎 + 𝑐𝑡𝑏 = 𝑐. Nếu 𝑎 | 𝑏𝑐 thì 𝑎 | 𝑡𝑏𝑐 . Ngoài ra 𝑎 | 𝑐𝑠𝑎 nên 𝑎 | c𝑠𝑎 + 𝑐𝑡𝑏 . Vì vậy: 𝑎 | 𝑐 𝑠𝑎 + 𝑡𝑏 ⇒ 𝑎 | 𝑐 Giải thuật nâng cao-Một số giải thuật trên số Chứng minh bổ đề 2 Bổ đề 2: Nếu p là số nguyên tố và 𝑝 | 𝑎1𝑎2𝑎𝑛 thì ∃𝑖: 𝑝 | 𝑎𝑖 Chứng minh quy nạp: n = 1, hiển nhiên Giả sử đúng với 𝑛 < 𝑘 . Giả sử 𝑝 | 𝑎1𝑎2𝑎𝑘 . Đặt 𝑚 = 𝑎1𝑎2𝑎𝑘−1 Trường hợp 1: nếu 𝑝 | 𝑚, ∃𝑖: 𝑝 | 𝑎𝑖 Trường hợp 2: nếu ≦𝑝 | 𝑚 ⇒ gcd 𝑝,𝑚 = 1. Ngoài ra 𝑝 | 𝑚𝑎𝑘 (giả thiết). Theo bổ đề 1 thì: 𝑝 | 𝑎𝑘 Giải thuật nâng cao-Một số giải thuật trên số Chứng minh định lý 2 Định lý 2: Nếu 𝑎𝑐 ≡ 𝑏𝑐 (𝑚𝑜𝑑 𝑚) và gcd 𝑐,𝑚 = 1 thì 𝑎 ≡ 𝑏 (𝑚𝑜𝑑 𝑚) Do: 𝑎𝑐 ≡ 𝑏𝑐 (𝑚𝑜𝑑 𝑚) nên: 𝑚 𝑎𝑐 − 𝑏𝑐 ⟹ 𝑚 𝑐 (𝑎 − 𝑏) Theo bổ đề 1 với: gcd 𝑐,𝑚 = 1 và 𝑚| 𝑐 (𝑎 − 𝑏) nên 𝑚 | (𝑎 − 𝑏) Vì vậy: 𝑎 ≡ 𝑏 (𝑚𝑜𝑑 𝑚) Giải thuật nâng cao-Một số giải thuật trên số Ứng dụng của định lý 2 • Trong phát sinh số giả ngẫu nhiên: chọn bội số a là nguyên tố cùng nhau với m. Nghĩa là: gcd (𝑚, 𝑎) = 1. Thì: • Hàm chuyển từ xn thành xn+1 là đơn ánh • Vì nếu: 𝑥𝑛+1 ≡ 𝑎𝑥𝑛 𝑚𝑜𝑑 𝑚 = 𝑎𝑥 ′ 𝑛𝑚𝑜𝑑 𝑚, (giả sử gia số 𝑐 = 0), thì: 𝑥𝑛 ≡ 𝑥 ′ 𝑛(𝑚𝑜𝑑 𝑚) • Nghĩa là: dãy số giả ngẫu nhiên không lặp lại cho đến khi gặp lại số x0 ban đầu Giải thuật nâng cao-Một số giải thuật trên số Lũy thừa modulo • Cho m nguyên dương, giá trị của 𝑏𝑛 𝑚𝑜𝑑 𝑚 được gọi là lũy thừa modulo. • Không thực tế nếu tính 𝑎 = 𝑏𝑛, sau đó tính 𝑎 𝑚𝑜𝑑 𝑚 • Dựa trên khai triển nhị phân của số nguyên để tính 𝑏𝑛 𝒃𝒏 = 𝒃𝒂𝒌−𝟏𝟐 𝒌−𝟏+𝒂𝒌−𝟐𝟐 𝒌−𝟐+⋯+𝒂𝟏𝟐+𝒂𝟎 = 𝒃𝒂𝒌−𝟏𝟐 𝒌−𝟏 𝒃𝒂𝟏𝟐𝒃𝒂𝟎 • Để tính 𝑏𝑛 𝑚𝑜𝑑 𝑚 thì cần tính: 𝑏2 𝑚𝑜𝑑 𝑚, 𝑏2 2 𝑚𝑜𝑑 𝑚, 𝑏2 3 𝑚𝑜𝑑 𝑚, , 𝑏2 𝑘−1 𝑚𝑜𝑑 𝑚 (bổ đề: 𝑎𝑏 𝑚𝑜𝑑 𝑚 = 𝑎 𝑚𝑜𝑑 𝑚 . (𝑏 𝑚𝑜𝑑 𝑚) 𝑚𝑜𝑑 𝑚 ) Giải thuật nâng cao-Một số giải thuật trên số Giải thuật tính lũy thừa modulo • Bổđề: 𝑎𝑏 𝑚𝑜𝑑 𝑚 = 𝑎 𝑚𝑜𝑑 𝑚 . (𝑏 𝑚𝑜𝑑 𝑚) 𝑚𝑜𝑑 𝑚 Giải thuật nâng cao-Một số giải thuật trên số Giải thuật tính lũy thừa modulo: ví dụ • Tính 3644 𝑚𝑜𝑑 645 Giải thuật nâng cao-Một số giải thuật trên số Số Mersenne • Số có dạng: 2𝑛 − 1 • Số nguyên tố Mersenne: là số nguyên tố có dạng 2𝑝 − 1, với p nguyên tố. • Ví dụ: 25-1 = 31 là nguyên tố Mersenne, nhưng 211-1 = 2047 không phải là nguyên tố Mersenne • Nếu M là nguyên tố Mersenne thì M(M+1)/2 là số hoàn hảo (số bằng với tổng các thương của nó – ví dụ: 28 = 1 + 2 + 4 + 7 + 14 ) • Ví dụ: 25-1 = 31 là nguyên tố Mersenne, thì 31*32/2=496 là số hoàn hảo • 496 = 2*2*2*2*31 1+2+4+8+16+31+62+124+248 = 496 • Số nguyên tố lớn nhất xác định được là số Mersenne. Giải thuật nâng cao-Một số giải thuật trên số Số nguyên tố Mersenne • Định lý: có vô hạn số nguyên tố • Kiểm tra Lucas-Lehmer: xác định số nguyên tố Mersenne • Số nguyên tố lớn nhất được tìm thấy: 12 triệu chữ số (tháng 10/2014) Giải thuật nâng cao-Một số giải thuật trên số Định lý số nguyên tố • Tỉ lệ của số lượng các số nguyên tố không lớn hơn x và x/ln(x) tiến tới 1 khi x tăng vô hạn • Số lượng các số nguyên tố nhỏ hơn x xấp xỉ bằng x/ln(x) (in 1792 by Gauss at 15...) • Cơ hội để số x là số nguyên tố xấp xỉ bằng: 1/ln(x). • Ví dụ: xét số nguyên tố có 200 chữ số • 𝑙𝑛 10200 ≈ 460 • Trong 460 số nguyên có 200 chữ số thì có có thể có 1 số nguyên tố. • Manindra Agrawal et al (2002) giới thiệu giải thuật 𝑂 𝑙𝑜𝑔𝑛 6 để xác định số n có phải là số nguyên tố Giải thuật nâng cao-Một số giải thuật trên số Ước chung lớn nhất • Cho hai số nguyên a, b: có thể sử dụng biểu diễn dạng tích của các nguyên tố để xác định GCD. • 𝑎 = 𝑝1 𝑎1𝑝2 𝑎2 𝑝𝑛 𝑎𝑛 , 𝑏 = 𝑝1 𝑏1𝑝2 𝑏2 𝑝𝑛 𝑏𝑛 . Các số mũ là nguyên không âm • Thì 𝑔𝑐𝑑 𝑎, 𝑏 = 𝑝1 min (𝑎1,𝑏1)𝑝2 min (𝑎2,𝑏2)𝑝𝑛 min (𝑎𝑛,𝑏𝑛) • Ví dụ: 120 = 23. 3.5, 500 = 22. 53 . Khi đó: 𝑔𝑐𝑑 120,500 = 2min (3,2)3min (1,0)5min (1,3) = 20 • Nhận xét: biểu diễn dạng thừa số nguyên tố có thể xác định được bội chung nhỏ nhất Giải thuật nâng cao-Một số giải thuật trên số Bội chung nhỏ nhất • Cho 𝑎 = 𝑝1 𝑎1𝑝2 𝑎2 𝑝𝑛 𝑎𝑛 , 𝑏 = 𝑝1 𝑏1𝑝2 𝑏2 𝑝𝑛 𝑏𝑛 . Các số mũ là nguyên không âm, thì: • 𝑙𝑐𝑚 𝑎, 𝑏 = 𝑝1 max (𝑎1,𝑏1)𝑝2 max (𝑎2,𝑏2)𝑝𝑛 max (𝑎𝑛,𝑏𝑛) • Ví dụ: 95256 = 23. 35. 72; 432 = 24. 33. Khi đó: 𝑙𝑐𝑚 95256,432 = 2max (3,4)3max (5,3)7max (2,0) = 190512 Giải thuật nâng cao-Một số giải thuật trên số Định lý LCM & GCD • Định lý: cho a, b là hai số nguyên dương, thì 𝑎 × 𝑏 = 𝑔𝑐𝑑 (𝑎, 𝑏) × 𝑙𝑐𝑚 𝑎, 𝑏 • Ví dụ: : 𝑔𝑐𝑑 (10,25) = 5, 𝑙𝑐𝑚 (10,25) = 50, vì vậy 10 × 25 = 5 × 50 • Định lý: cho 𝑎 = 𝑏𝑞 + 𝑟, với a, b, q, r là số nguyên. Thì 𝑔𝑐𝑑 (𝑎, 𝑏) = 𝑔𝑐𝑑 (𝑏, 𝑟). Giải thuật nâng cao-Một số giải thuật trên số Giải thuật Euclid xác định GCD • Tính GCD dựa trên phân tích thừa số nguyên tố: hạn chế vì cần xác định các thừa số nguyên tố • Nhận xét: Với mọi cặp số nguyên a, b thì: 𝑔𝑐𝑑 (𝑎, 𝑏) = 𝑔𝑐𝑑 𝑎 𝑚𝑜𝑑 𝑏, 𝑏 Giải thuật nâng cao-Một số giải thuật trên số procedure procedure (a,b:positive integers) x := a y := b while y 0 begin r := x mod y x := y y := r end { gcd(a, b) is x } Giải thuật Euclid-Ví dụ Giải thuật nâng cao-Một số giải thuật trên số gcd(372,164) = gcd(164, 372 mod 164). 372 mod 164 = 372164 372/164 = 372164·2 = 372328 = 44. gcd(164,44) = gcd(44, 164 mod 44). 164 mod 44 = 16444 164/44 = 16444·3 = 164132 = 32. gcd(44,32) = gcd(32, 44 mod 32) = gcd(32,12) = gcd(12, 32 mod 12) = gcd(12,8) = gcd(8, 12 mod 8) = gcd(8,4) = gcd(4, 8 mod 4) = gcd(4,0) = 4. Đồng dư tuyến tính-nghịch đảo • Đồng dư tuyến tính có dạng: 𝑎𝑥 ≡ 𝑏 (𝑚𝑜𝑑 𝑚). Mục tiêu là tìm x thỏa biểu thức trên • Gọi a’ là nghịch đảo (modulo m)của a, nếu: 𝑎′𝑎 ≡ 1 (𝑚𝑜𝑑 𝑚) • Nếu tồn tại a’, biểu thức trên: 𝑎′𝑎𝑥 ≡ 𝑎′𝑏 (𝑚𝑜𝑑 𝑚) 1. 𝑥 ≡ 𝑎′𝑏 (𝑚𝑜𝑑 𝑚) Định lý: nếu gcd (𝑎,𝑚) = 1 và 𝑚 > 1 thì tồn tại duy nhất a’ là nghịch đảo (modulo m) của a. Giải thuật nâng cao-Một số giải thuật trên số Ví dụ: đồng dư tuyến tính-nghịch đảo • Tìm nghịch đảo của 4 (modulo 9) 𝑔𝑐𝑑 4,9 = 1 9 = 2 4 + 1 1 = −2 4 + 19 −𝟐 4 ≡ 1 (𝑚𝑜𝑑 9) Các số đồng dư tuyến tính với -2 (mod 9) đều là nghịch đảo của 4 (modulo 9) Giải thuật nâng cao-Một số giải thuật trên số Định lý phần dư Trung hoa • Định lý: cho 𝑚1, ,𝑚𝑛 > 1 là nguyên tố cùng nhau, và 𝑎1, , 𝑎𝑛 là các số nguyên bất kỳ . Thì hệ phương trình 𝑥 ≡ 𝑎𝑖 𝑚𝑜𝑑 𝑚𝑖 , 𝑖 = 1 → 𝑛 có lời giải duy nhất modulo 𝑚 = 𝑚1 · ⋯ · 𝑚𝑛. Nghĩa là 0 ≤ 𝑥 < 𝑚, và nếu có y thỏa hệ phương trình trên thì 𝑥 ≡ 𝑦 (𝑚𝑜𝑑 𝑚). Đặt: 𝑀𝑖 = 𝑚/𝑚𝑖 thì gcd 𝑀𝑖 , 𝑚𝑖 = 1 ⇒ ∃! 𝑦𝑖: 𝑦𝑖𝑀𝑖 ≡ 1 (𝑚𝑜𝑑 𝑚𝑖) (định lý về đồng dư nghịch đảo) Đặt 𝒙 = 𝒂𝒊𝒚𝒊𝑴𝒊𝒊 . Vì: 𝑚𝑖|𝑀𝑘 , 𝑘 ≠ 𝑖, nên 𝑀𝑘 ≡ 0 (𝑚𝑜𝑑 𝑚𝑖) Nên: 𝑥 𝑚𝑜𝑑 𝑚𝑖 = 𝑎𝑙𝑦𝑙𝑀𝑙𝑙 𝑚𝑜𝑑 𝑚𝑖 = 𝑎𝑖𝑦𝑖𝑀𝑖 𝑚𝑜𝑑 𝑚𝑖 = 𝑎𝑖 𝑚𝑜𝑑 𝑚𝑖 Vậy: 𝑥 ≡ 𝑎𝑖 𝑚𝑜𝑑 𝑚𝑖 , ∀𝑖 = 1 → 𝑛. Và x là lời giải cần tìm. Giải thuật nâng cao-Một số giải thuật trên số Định lý phần dư Trung hoa-ví dụ Tìm x sao cho: 𝑥 ≡ 2 (𝑚𝑜𝑑 3), 𝑥 ≡ 3 (𝑚𝑜𝑑 7), 𝑥 ≡ 2 (𝑚𝑜𝑑 7) Giải thuật nâng cao-Một số giải thuật trên số m = 357 = 105 M1 = m/3 = 105/3 = 35 2 là nghịch đảo của M1 = 35 (mod 3) (vì 35x2 ≡ 1 (mod 3)) M2 = m/5 = 105/5 = 21 1 là nghịch đảo của M2 = 21 (mod 5) (vì 21x1 ≡ 1 (mod 5)) M3 = m/7 = 15 1 là nghịch đảo của M3 = 15 (mod 7) (vì 15x1 ≡ 1 (mod 7)) Vậy , x ≡ 2 2 35 + 3 1 21 + 2 1 15 = 233 ≡ 23 (mod 105) Lời giải: x ≡ 23 (mod 105) Dựa trên định lý phần dư Trung hoa x = ∑i ai yi Mi m = m1··mn. Mi = m/mi yi Mi ≡ 1 (mod mi). a1 = 2, a2 = 3, a3 = 2 m1 = 3, m2 = 5, m3 = 7 Định lý phần dư Trung hoa-MATLAB function x=CRT(r,p) if (length(r)==length(p)) l=length(r); CM=1; for i=1:l CM=CM*p(i); end M=zeros(1,l); for i=1:l M(i)=CM/p(i); end IM=zeros(1,l); x=0; for i=1:l IM(i)=invmodan(M(i),p(i)); x=x+r(i)*M(i)*IM(i); end display('Value of x: '); x=mod(x,CM); else display('Length of r and p matrices must be same'); end Giải thuật nâng cao-Một số giải thuật trên số Định lý phần dư Trung hoa-MATLAB function y=invmodn(x,p) n=eulerphi(p); % Compute Euler's totient function of p b=dec2bin(n-1); len=length(b); a=ones(1,len); a(1)=rem(x,p); for i=1:(len-1) a(i+1)=rem((a(i))^2,p); end b=fliplr(b); mul=1; for i=1:len if b(i)=='0' a(i)=1; end mul=mul*a(i); mul=rem(mul,p); end y=rem(mul,p); Giải thuật nâng cao-Một số giải thuật trên số Định lý phần dư Trung hoa-MATLAB function phi=eulerphi(n) if (n>1 && mod(n,1)==0) f=factor(n); l=length(f); phi=1; for i=1:l phi=phi*(f(i)-1); end elseif (n==1) phi=1; else display('Invalid number entered'); end Giải thuật nâng cao-Một số giải thuật trên số Tính toán số nguyên lớn • Cho số nguyên a bất kỳ, 0 ≤ 𝑎 < 𝑚 , với 𝑚 = 𝑚𝑖 , gcd 𝑚𝑖 , 𝑚𝑗≠𝑖 = 1 thì a có thể được biểu diễn bởi các phần dư của a với mi. Nghĩa là bộ n 𝑎 𝑚𝑜𝑑 𝑚1, 𝑎 𝑚𝑜𝑑 𝑚2, , 𝑎 𝑚𝑜𝑑 𝑚𝑛 . • Xét hệ phương trình: 𝑥 ≡ 𝑎𝑖 𝑚𝑜𝑑 𝑚𝑖 , với 𝑎𝑖 = 𝑎 𝑚𝑜𝑑 𝑚𝑖 . Thì tồn tại duy nhất nghiệm x. • Xét: 𝑥 = 𝑎 𝑚𝑜𝑑 𝑚, thì x là nghiệm của hệ phương trình trên. Giải thuật nâng cao-Một số giải thuật trên số Tính toán số nguyên lớn Hãy biểu diễn số nguyên x nhỏ hơn 12 bởi một cặp. Chọn cặp là hai số nguyên tố cùng nhau. Ví dụ 3 và 4. Biểu diễn x theo các bộ (𝑥 𝑚𝑜𝑑 3, 𝑥 𝑚𝑜𝑑 4). Xác định phần dư của các số chia cho 3 và 4. 0=(0,0); 1=(1,1); 2=(2,2); 3=(0,3); 4=(1,0); 5=(2,1); 6=(0,2); 7=(1,3); 8=(2,0); 9= (0,1); 10 = (1,2); 11= (2,3) • Ví dụ: 11 = (11 mod 3, 11 mod 4) = (2, 3) Vậy: có thể sử dụng hai số nguyên nhỏ để biểu diễn số nguyên nhỏ hơn 12. Giải thuật nâng cao-Một số giải thuật trên số Tính toán số nguyên lớn •Để thực hiện tính toán trên số nguyên lớn, thực hiện theo các bước sau • Thực hiện trên các phép toán trên các phần dư! • Có thể thực hiện song song. • Hay thực hiện tuần tự trên máy đơn. • Tiếp tục đến khi desired result < m. Giải thuật nâng cao-Một số giải thuật trên số Tính toán số nguyên lớn Ví dụ: giả sử có thể tính toán dễ với các số nhỏ hơn 100; Khi đó có thể giới hạn tính toán các số nguyên thành tính các số nhỏ hơn 100, nếu có thể biểu diễn ở dạng phần dư đôi một nguyên tố cùng nhau, ví dụ: 99, 98, 97, 95. Theo định lý phần dư Trung Hoa, mọi số nhỏ hơn 9998 9795 = 89.403.930 có thể biểu diễn duy nhất theo các phần dư của chúng với các số 99, 98 , 97 , 95. Ví dụ, số 123684 có thể biểu diễn bởi (123684 mod 99; 123684 mod 98; 123684 mod 97; 123684 mod 95) = (33,8,9,89) 413456 có thể biểu diễn bởi (413456 mod 99; 413456 mod 98; 413456 mod 97; 413456 mod 95)= (32,92,42,16) Giải thuật nâng cao-Một số giải thuật trên số Tính toán số nguyên lớn Để cộng hai số 123.684, và 413456. (33, 8, 9, 89)+(32, 92 , 42, 16) = (65 mod 99, 100 mod 98, 51 mod 97, 105 mod 95) = (65, 2, 51, 10) Để tìm tổng: giải hệ phương trình đồng dư tuyến tính sau x ≡ 65 (mod 99) x ≡ 2 (mod 98) x ≡ 51 (mod 97) x ≡ 10 (mod 95) Lời giải: x= 537,140 Giải thuật nâng cao-Một số giải thuật trên số Tính toán số nguyên lớn • Ví dụ, các số sau là nguyên tố cùng nhau: m1 = 2 25−1 = 33,554,431 = 31 · 601 · 1,801 m2 = 2 27−1 = 134,217,727 = 7 · 73 · 262,657 m3 = 2 28−1 = 268,435,455 = 3 · 5 · 29 · 43 · 113 · 127 m4 = 2 29−1 = 536,870,911 = 233 · 1,103 · 2,089 m5 = 2 31−1 = 2,147,483,647 (prime) • Vậy, có thể biểu diễn số nguyên lớn • m = ∏mi ≈ 1.4×10 42 ≈ 2139.5 theo các phần dư ri modulo với các mi trên. • Vd:. 1030 = (r1 = 20900945; r2 = 18304,504; r3 = 65829085; r4 = 516865185; r5 = 1234980730) • Để cộng hai số theo biểu diễn đồng dư • Cộng các phần dư tương ứng. • Lấy kết quả mod 2k−1: • Nếu ≥ giá trị 2k−1, trừ nó với 2k−1 • Chú ý: No carries are needed between the different pieces! Giải thuật nâng cao-Một số giải thuật trên số Pseudoprimes • Nếu n nguyên tố thì 2𝑛−1 ≡ 1 (𝑚𝑜𝑑 𝑛), tuy nhiên điều ngược lại không đúng [nghĩa là nếu 2𝑛−1 ≡ 1 (𝑚𝑜𝑑 𝑛) thì n có thể không nguyên tố]. • Ví dụ: 2𝟑𝟒𝟏−1 ≡ 1 (𝑚𝑜𝑑 341) , nhưng 341 = 11 × 31 không phải là số nguyên tố. • Số n với tính chất này được gọi là pseudoprime. • Tổng quát, nếu 𝒃𝒏−𝟏 ≡ 𝟏 (𝒎𝒐𝒅 𝒏) và n là số hợp nguyên, thì n được gọi là pseudoprime cơ số b. Giải thuật nâng cao-Một số giải thuật trên số Định lý nhỏ của Fermat • Định lý: (Fermat’s Little Theorem.) • Nếu p nguyên tố và a nguyên không chia hết p; (𝑎 ∤ 𝑝), thì 𝑎𝑝−1 ≡ 1 (𝑚𝑜𝑑 𝑝) • Ngoài ra, với mọi số nguyên a thì 𝑎𝑝 ≡ 𝑎 (𝑚𝑜𝑑 𝑝) • Nhận xét: nếu 𝑎 ∈ 𝑍𝑝 thì 𝑎 𝑝−1 ≡ 1 trong Zp. Giải thuật nâng cao-Một số giải thuật trên số Các số Carmichael • Định nghĩa: số hợp nguyên n thỏa mãn 𝑏𝑛−1 ≡ 1 𝑚𝑜𝑑 𝑛 , ∀𝑏: gcd 𝑏, 𝑛 = 1 được gọi là số Carmichael. • Ví dụ: 561 là số Carmichael • 561=3.11.17 • Nếu gcd (𝑏, 561) = 1 thì gcd (𝑏, 3) = 1, gcd (𝑏, 11) = 1, gcd (𝑏, 17) = 1 • 𝑏2 ≡ 1 𝑚𝑜𝑑 3 ; 𝑏1 ≡ 1 𝑚𝑜𝑑 11 ; 𝑏16 ≡ 1 𝑚𝑜𝑑 17 ; • 𝑏560 = 𝑏2 280 ≡ 1 (𝑚𝑜𝑑 3) • 𝑏560 = 𝑏10 56 ≡ 1 (𝑚𝑜𝑑 11) • 𝑏560 = 𝑏16 35 ≡ 1 (𝑚𝑜𝑑 16) • Các số: 1105, 1729, 2465, 2821, 6601, 8911, 10585, 15841, 29341 là số Carmichael Giải thuật nâng cao-Một số giải thuật trên số Mã RSA Phát sinh mã 1. Chọn hai prime numbers p và q (ngẫu nhiên). 2. 𝑛 = 𝑝𝑞, dùng làm modulus. 3. 𝜑(𝑛) = 𝜑(𝑝)𝜑(𝑞) = (𝑝 − 1)(𝑞 − 1) = 𝑛 − (𝑝 + 𝑞 − 1) hàm totient), là private key 4. Chọn số e sao cho 1 < 𝑒 < 𝜑(𝑛), và gcd(e, φ(n)) = 1. • e là public key exponent. • Giá trị e nhỏ không hiệu quả để bảo mật. 5. Tìm: d ≡ e−1 (mod φ(n)). • d là private key exponent • Public key: số n và e. • Private key: số d. Giải thuật nâng cao-Một số giải thuật trên số Mã RSA Mã hóa 1. A gởi 𝑛, 𝑒 (public key - gởi đi) cho B. A giữ bí mật giá trị d. 2. B cần gởi gói tin M mã với 𝑛, 𝑒 để gởi cho A. 3. Chuyển M thành giá trị nguyên m. 4. Tính 𝑐 ≡ 𝑚𝑒 𝑚𝑜𝑑 𝑛 , là gói B gởi cho A. Giải mã • A cần phục hồi m, M khi nhận được c từ B. • 𝑚 ≡ 𝑐𝑑 𝑚𝑜𝑑 𝑛 Giải thuật nâng cao-Một số giải thuật trên số Mã RSA-ví dụ • Cho 𝑝 = 61, 𝑞 = 5. • 𝑛 = 61 ∗ 53 = 3233 • 𝜑 3233 = 3120 • Chọn 1 < 𝑒 < 3120 nguyên tố cùng nhau với 3120. Chọn e = 17. • 𝑒 × 𝑑 = 1 (𝑚𝑜𝑑 3120) d = 2753. • Public key: 𝑛 = 3233, 3 = 17 • Private key: 𝑑 = 2753. • Cho m = 65 • Mã hóa m: 𝑐 = 6517 𝑚𝑜𝑑 3233 = 2790. • Giải mã c: 𝑚 = 27902753 𝑚𝑜𝑑 3233 = 65. Giải thuật nâng cao-Một số giải thuật trên số Bài tập 1. Tìm nghiệm: 2 2 2006 𝑚𝑜𝑑 3 2 2 2006 = 2 2.2 2005 = 4 2 2205 ≡1 (𝑚𝑜𝑑 3) 2. Chứng minh: nếu tồn tại số đảo (multiplicative inverse hoặc reciprocal) modulo N, thì nó là duy nhất. Giả sử tồn tại hai số đảo x1, x2 khác nhau của a. 𝑥1 = 𝑥1. 1 = 𝒙𝟏. 𝒂. 𝑥2 = 1. 𝑥2 = 𝑥2 𝑚𝑜𝑑 𝑁 Giải thuật nâng cao-Một số giải thuật trên số Bài tập 3. Xét RSA, p=7, q=11. Tìm e và d. 𝑝 − 1 ∗ 𝑞 − 1 = 60 Tìm e nguyên tố cùng nhau với 60, và có số nghịch đảo. Chọn e=11 d= 11 (mod 60). Có thể chọn các cặp (e, d) khác: (7, 43); (13, 37); (17, 53); (19, 59); (23, 47); (29, 29); (31, 31); (41, 41). 4. Cài đặt và thuyết minh RSA bằng MATLAB. Giải thuật nâng cao-Một số giải thuật trên số
File đính kèm:
- bai_giang_giai_thuat_nang_cao_mot_so_giai_thuat_tren_so_ngo.pdf