5 Các thuật toán liên quan đến số nguyên

Một phần của tài liệu Tài liệu hỗ trợ học tập môn học toán dùng trong tin học (Trang 46 - 62)

Mệnh đề 3.3

1. 5. a. Thuật toán Euclid

Thuật toán dựa trên biểu thức a = qb + (a mod b), theo đó nếu c là ước chung của a và b thì nó cũng là ước của r = (a mod b).

Thuật toán Euclid

procedure gcd(a, b là 2 số nguyên dương)

x:= a; y:= b; while y  0 begin r:= x mod y; x:= y; y:= r; end {gcd(a, b) là x} Định lý 3.6

Cho n, b  ℤ, n > 0 và b > 1. Tồn tại duy nhất k số nguyên ai (i = 1..k) thỏa 0  ai < b và ak  0 sao cho n = ak bk + ak–1bk–1 + … + a1b + a0. Cách viết này gọi là biểu diễn n theo cơ số b và được ký hiệu là n = (akak–1…a1a0)b

Chú ý: Khi b = 10, ta không cần n = (akak–1…a1a0)10, ký hiệu đơn giản n = akak–1…a1a0

1. 5. b. Thuật toán khai triển theo cơ số b

procedure khai triển theo cơ số b (n: nguyên dương)

q:= n; k:= 0

while q  0

begin

ak:= q mod b; a:= q / b; k: = k + 1

end {khai triển cơ số b của n là (ak–1 … a1 a0)b}

1. 5. c. Các phép toán trên số nguyên

Phân tích phép cộng. Đặt s = a + b = (sn sn–1 … s1 s0)2 và ci là số nhớ thứ i a0 + b0 = 2c0 + s0;

ai + bi + ci–1 = 2ci + si (i = 1, 2, …, n –1) cn–1 = sn

Thuật toán cộng hai số nguyên n bit

procedure cộng (a, b: nguyên dương)

{a = (an–1 an–2 … a1 a0)2 và b = (bn–1 bn–2 … b1 b0)2} c:= 0

for j:= 0 to n–1

d:= (aj + bj + c) / 2; sj:= aj + bj + c – 2d; c: = d end sn:= c {s = (sn sn–1… s1 s0)2} Phân tích đến phép nhân. Ta có n 1 j n 1 j j j j 0 j 0 ab a b 2 a(b 2 )       

Thuật toán nhân hai số nguyên n bit

procedure nhân (a, b: nguyên dương)

{a = (an–1 an–2 … a1 a0)2 và b = (bn–1 bn–2 … b1 b0)2}

for j:= 0 to n–1

if bj = 1 then cj:= a được dịch đi j chỗ

else cj:= 0 {c0, c1, …, cn–1 là các tích riêng phần} p:= 0 for j:= 0 to n–1 p:= p + cj { p là giá trị của tích ab } Mệnh đề 3.4

a) Cho a, b nguyên dương, tồn tại các số nguyên s và t sao cho gcd(a, b) = sa + tb. Dạng này được gọi là biểu diễn tuyến tính của gcd(a,b) theo a và b.

b) Cho a, b, c nguyên dương, gcd(a, b) = 1. Nếu a | bc, thì a | c.

c) Cho a, b, c, m ∈ ℕ, m > 0, gcd(c, m) = 1. Nếu ac  bc (mod m), thì a  b (mod m).

Định nghĩa 3.8

a) Phương trình 𝑎𝑥 ≡ 𝑏 (𝑚𝑜𝑑 𝑚) với m số nguyên dương, a và b là số nguyên và x là biến số được gọi là đồng dư tuyến tính.

b) Nếu 𝑎𝑎̅ = 1 (𝑚𝑜𝑑 𝑚) thì 𝑎̅ được gọi là số nghich đảo của a theo modulo m

Định lý 3.7

Cho a và m là nguyên tố cùng nhau với m dương, a có nghịch đảo theo modulo m và nghịch đảo của a tồn tại duy nhất theo nghĩa modulo.

Định lý 3.8 – Dư số Trung hoa

Cho 𝑚1, 𝑚2, … , 𝑚𝑛 là n số nguyên dương nguyên tố cùng nhau từng đôi. Hệ n phương trình 𝑥 = 𝑎𝑖 (mod 𝑚𝑖), 𝑖 = 1, … , 𝑛 có nghiệm duy nhất theo modulo 𝑚 = 𝑚1𝑚2… 𝑚𝑛

Định nghĩa 3.9

a) Cho b là số nguyên dương. Hợp số n thỏa bn – 1 1 (mod n) được gọi là số giả

nguyên tố theo cơ số b

b) Hợp số n thỏa bn – 1 1 (mod n) với mọi số nguyên dương b nguyên tố cùng nhau với a được gọi là số Carmichael.

Định lý 3.9

Nếu 𝑝 là số nguyên tố và 𝑎 là số nguyên không chia hết cho 𝑝, thì 𝑎𝑝−1 ≡ 1(mod 𝑝). Hơn nữa với mọi số nguyên 𝑎 ta có 𝑎𝑝 ≡ 𝑎 (mod 𝑝).

Định nghĩa 3.10

a) Cho 𝑏 là số nguyên dương. Hợp số 𝑛 thỏa 𝑏𝑛−1 ≡ 1 (mod 𝑛) được gọi là số giả

nguyên tố theo cơ số 𝑏.

b) Hợp số 𝑛 thỏa 𝑏𝑛−1≡ 1(mod 𝑛) với mọi số nguyên dương b nguyên tố cùng nhau với n được gọi là số Carmichael.

2. Ví dụ

Ví dụ 3.1

Kiểm tra 3 | 7 và 3 | 12 đúng hay sai? Giải:

Ta có:

 3 | 7 sai vì không có số nguyên k để 7=3k,  3 | 12 đúng vì 12 = 3  4.

Ví dụ 3.2

Cho n và d là hai số nguyên dương. Hãy tính xem có bao nhiêu số nguyên dương không vượt quá n chia hết cho d.

Giải:

Số nguyên dương chia hết cho d có dạng dk. Số nguyên dương chia hết cho d và không vượt quá n sẽ có dạng dk với 0 < kd  n, vậy 0 < k  n

d. Kết luận có n d       số như thế. Ví dụ 3.3 Cho ví dụ về số nguyên tố và hợp số Giải

 Số 2 là số nguyên tố vì nó chỉ có các ước số dương là 1 và 2,

 Số 5 là số nguyên tố vì nó chỉ có các ước số dương là 1 và 5,

 Số 7 là số nguyên tố vì nó chỉ có các ước số dương là 1 và 7,

 Tương tự ta có các số nguyên tố nhỏ thông dụng như: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, …

 Số 4 là hợp số vì nó chia hết cho 2.

Ví dụ 3.4

Phân tích 100, 999, 1024 và 7007 ra thừa số nguyên tố, Giải:

Ta có kết quả:

 100 = 2.2.5.5. = 2252 ;  999 = 3.3.3.37 = 33.37;

 1024 = 2.2.2.2.2.2.2.2.2.2 = 210.

 Bắt đầu từ 2, là số nguyên tố nhỏ nhất, ta có 7007 không chia hết cho 2, 3 và 5;

 Với 7, ta có 7007 = 10017 = 14372;  Với 11, ta có 143 = 1311, suy ra 7007 = 137211;  Vì 13 là số nguyên tố, ta có 7007 = 721113. Vậy 7007 = 721113. Ví dụ 3.5 Chứng minh rằng: a) Số 101 là số nguyên tố. b) Số 641 là số nguyên tố. Giải:

a) Các số nguyên tố không vượt quá 101có cả thảy là 2, 3, 5 và 7. Vì 101 không chia hết cho 2, 3, 5 và 7 suy ra 101 là một số nguyên tố.

b) Các số nguyên tố không vượt quá √641 có cả thảy là P={2, 3, 5, 7, 9, 11, 13, 17, 19, 23}. Vì 641 không chia hết cho các số nguyên tố trong P nên suy ra 641 là một số nguyên tố.

Ví dụ 3.6

Tìm số thương và số dư khi chia 101 cho 11 và (–11) cho 3. Giải:

Ta có

 101 = 119 + 2, vậy số thương là 9 và số dư là 2;  –11 = 3(–4) + 1, vậy số thương là –4 và số dư là 1.

Ví dụ 3.7

Tìm ước số chung lớn nhất của 24 và 36, của 17 và 22. Giải

 Phân tích thừa số nguyên tố 24 = 23x3 và 36 =22x32 ta có gcd(24, 36) = 22x3 = 12. Hay lý luận khác, các ước số chung dương của 24 và 36 là 1, 2, 3, 4, 6 và 12, Suy ra gcd(24, 36) = 12.

Ví dụ 3.8

Kiểm tra tính đôi một nguyên tố cùng nhau của 10, 17 và 21; của 10, 19 và 24. Giải

 gcd(10, 17) = gcd (10, 21) = gcd (17, 21) = 1, suy ra 10, 17 và 21 đôi một nguyên tố cùng nhau;

 gcd (10, 24) = 2 > 1, suy ra 10, 19 và 24 không là đôi một nguyên tố cùng nhau.

Ví dụ 3.9

Tìm ước số chung lớn nhất và bội số chung nhỏ nhất của: a) 24 và 36, b) 17 và 22. Giải a) gcd(24, 36) = 12; lcm(24, 36) = (2436)/gcd(24, 36) = 72; b) gcd(17, 22) = 1; lcm(17, 22) = 1722 = 374. Ví dụ 3.10

Kiểm tra 17 5 (mod 6), 24 14 (mod 6)? Giải:

Ta có

 17 – 5 = 12 chia hết cho 6, nên 17  5 (mod 6);

 24 – 14 = 10 không chia hết cho 6 nên 24 ≢ 14 (mod 6).

Ví dụ 3.11

Dùng mật mã của Caesar mã hoá câu “MEET YOU IN THE PARK” Giải

Trước hết, thay các chữ cái trong bức thư gốc thành các số, ta được dãy số 12, 4, 4, 19, 24, 14, 20, 8, 13, 19, 7, 4, 15, 0, 17, 10. Bây giờ thay mỗi số bởi ảnh của nó qua f ta được dãy số kết quả 15, 7, 7, 22, 1, 17, 23, 11, 16, 22, 10, 7, 18, 3, 20, 13. Cuối cùng thay các số bằng chữ cái, ta được bức thư đã được mã hóa “PHHW BRX LQ WKH SDUN”.

Để giải mã ta dùng hàm ngược f–1(p) = (p – 3) (mod 26).

Có nhiều cách tổng quát hóa mật mã của Caesar. Ví dụ, f(p) = (p + k) mod 26. Một mật mã như thế được gọi là mật mã chuyển. Rõ ràng, mã hoá theo cách này có độ an toàn không cao. Có nhiều cách nâng cao độ an toàn của phương pháp này, chẳng hạn dùng f(p) = (ap + b) mod 26, với a, b là được chọn sao cho f là một song ánh.

Ví dụ 3.12

Giải

Vì số 10 biểu diễn chữ cái K. Ta có f(10) = (710 + 3) mod 26 = 21 ứng với chữ cái V.

Ví dụ 3.13

Dùng thuật toán Euclide tìm gcd(91, 287). Giải Đặt x = 91; y = 287; r = x = 91. (y = kx + r) 1) 287 = 391 + 14; (x = r = 14; y = 91) 2) 91 = 614 + 7; (x = r = 7; y = 14) 3) 14 = 27 + 0; (r = 0) 4) gcd (x, y) = 7 Kết luận gcd(91, 287) = 7 Ví dụ 3.14

Hãy biểu diễn

a) 165 theo cơ số bát phân.

b) 12345 theo cơ số bát phân.

c) 351 theo cơ số nhị phân.

d) 175627 theo cơ số thập lục phân.

e) (E5)16 theo cơ số nhị phân. f) (11100101)2 theo cơ số bát phân.

g) (1010100101)2 theo cơ số thập lục phân.

Giải

Về nguyên tắc ta thực hiện lần lượt các phép chia cho cơ số tìm phần dư và ráp lại để có kết quả, để tiện theo dõi ta trình bày kết qua sau cùng của các phép chia dưới dạng tổng các số hạng để ghi nhận kết quả có được

a) 165 = 282 + 48 + 5 = (245)8 b) Thể hiện chậm cách chia 8: 12345 = 15438 + 1 = (1928 + 7)8 + 1 = ((248 + 0)8 + 2)8 + 1 = ((38 + 0)8 + 0)8 + 7)8 + 1 = (30071)8 c) 351 = 28 + 26 + 24 + 23 + 22 + 21 + 1 = (101011111)2 (chú ý những vị trí giá trị 0, ví dụ như 27) d) 175627 = 2164 + 10163 + 14162 + 11 = (2AE0B)16 (chú ý những vị trí giá trị 0, ví dụ như 161) e) E16 = (1110)2 và (5)16 = (0101)2, do đó (E5)16 = (11100101)2

f) (11100101)2 = (345)8 vì (011)2 = (3)8, (100)2 = (4)8 và (101)2 = (5)8

g) (2)16 = (10)2, (A)16 = (1010)2 và (5)16 = (0101)2 nên (10 1010 0101)2 = (2A5)16.

Ví dụ 3.15 Cộng và nhân hai số a = (1110)2 và b = (1011)2. Giải Cộng 1110 1011 11001 Nhân 1110 1011 1110 1110 11100 10011010 Ví dụ 3.16

Tìm biểu diễn tuyến tính của gcd(252, 198) theo 252 và 198 Giải:

Bước 1: chính là quá trình tìm ước chung lớn nhất 252 = 1198 + 54 (54 = 252 – 198) 198 = 354 + 36 (36 = 198 – 354) 54 = 136 + 18 (18 = 54 – 36) 36 = 218 gcd(252, 198) = 18 Bước 2: đi ngược bước 1 tìm biểu diễn

18 = 54 – 36 = 54 – (198 – 354) = 454 – 198 = 4(252 – 198) – 189 = 4252 – 5198 Vậy gcd(252, 198) = 4252 – 5198 Ví dụ 3.17

Tìm nghịch đảo của 3 theo modulo 7. Giải:

Vì gcd(3, 7) = 1 nên nghịch đảo của 3 theo modulo 7 tồn tại.

Ta có 1 = –23 + 7, suy ra –2 là nghịch đảo của 3 theo modulo 7. Chú ý do tính chất modulo nếu chọn số dương ta có thể chọn 5 là nghịch đảo của 3 theo modulo 7 (5 = –2 + 7 hay trực tiếp tính toán (35 – 27 = 1)

Ví dụ 3.18

Giải hệ đồng dư tuyến tính {

𝑥 = 2 (𝑚𝑜𝑑 3) 𝑥 = 3 (𝑚𝑜𝑑 5) 𝑥 = 2 (𝑚𝑜𝑑 7)

Giải:

Áp dụng định lý dư số Trung hoa. Tính m = 357 = 105, M1 = 35, M2 = 21 và M3 = 15. Xét các nghịch đảo yk của Mk theo modulo 𝑚𝑘, 𝑚𝑘 ∈ {3, 5, 7}.

Ta tính ra được y1 = 2, y2 = 1 và y3 = 1

Suy ra 𝑥 = ∑ 𝑥𝑘 𝑘𝑀𝑘𝑦𝑘 = 2352 + 3211 + 2151 = 233 = 23 (mod 105).

Ví dụ 3.19

Cho a và b là 2 số nguyên dương. Chứng minh (2a – 1) mod (2b – 1) = 2a mod b – 1. Giải

Nếu 𝑎 ≤ 𝑏 thì kết quả hiển nhiên đúng. Giả sử 𝑎 > 𝑏

Đặt r = a mod b, có số nguyên dương k thỏa a = kb + r. Không mất tính tổng quát, ta có thể giả sử k ≥ 2

Ta có (xk – 1) = (xk – 1 + xk – 2 + … + 1)(x – 1) nên khi x nguyên (x – 1) | (xk – 1), Do đó: (2a− 1) − (2r − 1) = 2kb+r − 2r = 2r((2b)k− 1) chia hết cho (2b − 1)

Nói cách khác (2a − 1) mod (2b − 1) = (2r − 1) = 2a mod b− 1

Ví dụ 3.20

Áp dụng kết quả ví dụ trên chứng tỏ khi cho a và b là 2 số nguyên dương thì ta có gcd(2a – 1, 2b – 1) =2gcd(a, b) – 1.

Giải

Áp dụng kết quả ví dụ trên phối hợp với thuật toán Euclide tìm gcd, ta thấy hạ dần giá trị 2𝑎 𝑚𝑜𝑑 𝑏− 1 đến kết quả cuối cùng là 2gcd (𝑎,𝑏)− 1

Ví dụ 3.21

Chứng tỏ 341 là một số giả nguyên tố theo cơ số 2. Giải

Ta có 341 = 1131 nên 341 không phải là số nguyên tố. Ta có 2, 11 và 31 là số nguyên tố Theo định lý nhỏ Fermat 210 = 211−1 ≡ 1 (𝑚𝑜𝑑 11) nên 2340 = (210)34 ≡ 1 (𝑚𝑜𝑑 11) Dễ thấy 25 = 32 ≡ 1 (𝑚𝑜𝑑 31) và do đó 2340 = (25)68 ≡ 1 (𝑚𝑜𝑑 31)

Do đó 2340 ≡ 1 (𝑚𝑜𝑑 11 × 31) ≡ 1 (𝑚𝑜𝑑 341) Vậy 341 là một số giả nguyên tố theo cơ số 2.

Ví dụ 3.22

Chứng minh số 561 là một số Carmichael. Giải

Phân tích thừa số nguyên tố, 561 = 3 × 11 × 17. Cho số nguyên dương b nguyên tố cùng nhau với 561, n.l 𝑔𝑐𝑑(𝑏, 561) = 1

Do đó 𝑔𝑐𝑑(𝑏, 3) = 1, 𝑔𝑐𝑑(𝑏, 11) = 1 và 𝑔𝑐𝑑(𝑏, 17) = 1

Theo định lý nhỏ Fermat, ta cũng có b2 1 (mod 3), b10 1 (mod 11) và b16 1 (mod 17). Suy ra b560  1 (mod 3), b560  1 (mod 11) và b560 1 (mod 17).

Do đó b560  1 (mod 561). Vậy 561 là một số Carmichael.

Biểu diễn bù 1 của số nguyên là phương pháp lưu trữ trên máy tính để đơn giản hóa các phép tính đại số. Khi lưu trữ số nguyên x có n bit:

 Giá trị tuyệt đối của số nguyên x nhỏ hơn 2n-1.  Bit đầu tiên biểu diễn dấu: 0 cho + và 1 cho –.

 Với số dương (n – 1) bit còn lại biểu diễn nhị phân cho trị tuyệt đối x.

 Với số âm (n – 1) bit còn lại là phần bù từng bit của biểu diễn nhị phân cho trị tuyệt đối x.

Ví dụ 3.23

Với số nguyên lưu trữ 8 bit, tìm biểu diễn bù 1 của:

a)28 b)120 c) -39 d)-108 Giải a) 28 = (1110)2 = (00001110)2. b) 120 = (1111000)2 = (01111000)2. c) 39 = (100111) 2 = (0100111)2. Vậy −39 = (11011000)2. d) 108 = (1101100)2. Vậy −108 = (10010011)2. Ví dụ 3.24

Tìm giá trị của số nguyên lưu trữ 8 bit có biểu diễn bù 1 là: a) (10110011)2.

b) (11010101)2.

c) (01100110)2.

d) (00110011)2.

Giải

a) (10110011)2 là số âm. Xét phần bù 7 bit cuối (0110011̅̅̅̅̅̅̅̅̅̅̅̅)2 = (1001100)2 = 76. Vậy (10110011)2 = −76.

b) (11010101)2 là số âm. Xét phần bù 7 bit cuối (1010101̅̅̅̅̅̅̅̅̅̅̅̅)2 = (0101010)2 = 42. Vậy (11010101)2 = − 42.

c) (01100110)2 = (1100110)2 = 102

d)(00110011)2 = (110011)2 = 51

Biểu diễn bù 2 của số nguyên là phương pháp lưu trữ trên máy tính để việc thực hiện các phép tính đại số tự nhiên hơn. Khi lưu trữ số nguyên x có n bit:

 Giá trị tuyệt đối của số nguyên x nhỏ hơn 2n-1.  Bit đầu tiên biểu diễn dấu: 0 cho + và 1 cho –.

 Với số dương, (n – 1) bit còn lại biểu diễn nhị phân cho trị tuyệt đối x.

 Với số âm, (n – 1) bit còn lại là biểu diễn nhị phân cho 2𝑛−1− |x|. Đơn giản giá trị này bằng giá trị bù 1 cộng thêm 1

Ví dụ 3.25

Với số nguyên lưu trữ 8 bit, tìm biểu diễn bù 2 của:

a) 28 b) 120 c) -39 d) -108

Giải

Số nguyên dương sẽ giống bù 1. Chỉ khác số nguyên âm c) và d)

a) 28 = (1110)2 = (00001110)2.

b) 120 = (1111000)2 = (01111000)2.

c) 39 = (100111) 2 = (0100111)2. Vậy −39 = (11011001)2.

d) 108 = (1101100)2. Vậy −108 = (10010100)2.

Ví dụ 3.26

Tìm giá trị của số nguyên lưu trữ 8 bit có biểu diễn bù 2 là: a) (10110011)2.

b) (11010101)2.

c) (01100110)2.

d) (00110011)2.

Giải

a) (10110011)2 là số âm. Phần bù 7 bit cuối – 1: (01101010̅̅̅̅̅̅̅̅̅̅̅̅̅̅)2 = (1001101)2 = 77. Vậy (10110011)2 = −77.

b) (11010101)2 là số âm. Phần bù 7 bit cuối – 1: (1010100̅̅̅̅̅̅̅̅̅̅̅̅)2 = (0101011)2 = 43. Vậy (11010101)2 = − 43.

c) (01100110)2 = (1100110)2 = 102 d) (00110011)2 = (110011)2 = 51

Khi làm việc với máy tính, việc thực hiện các phép tính đại số trên số nguyên có thể xảy ra hiện tượng bất thường như cộng hay nhân 2 số dương thành số âm, …; điều này xảy ra khi ta không lường được giá trị số nguyên vượt quá kích thước số bit lưu trữ xảy ra

Ví dụ 3.27

Với số nguyên lưu trữ 8 bit, tìm biểu diễn bù 2 của 65 và 92. Cho biết kết quả phép cộng 2 số trên biểu diễn nhị phân này. Kết luận gì?

Giải

65 = (1000001)2 = (01000001)2 (bù 2) 97 = (1100001)2 = (01100001)2 (bù 2)

(01000001)2+ (01100001)2 = (10100010)2 = −33 (bù 2)

Không phải 65 + 97 = 162 mà là −33, lỗi này xảy ra vì giá trị 162 > 127. Ta bị hiện tượng tràn số.

3. Bài tập

Bài 3.1

Cho a là một số nguyên khác 0. Chứng minh rằng:

a) 1 chia hết a b) a chia hết 0

Bài 3.2

Cho 𝑎 và 𝑏 là hai số nguyên. Nếu 𝑎|𝑏 và 𝑏|𝑎 thì chứng minh 𝑎 = 𝑏 hay 𝑎 = −𝑏

Bài 3.3

Cho 𝑎, 𝑏 và 𝑐 là số nguyên với 𝑐 > 0, 𝑎 ≠ 0 và 𝑎|𝑏𝑐. Chứng minh 𝑎|𝑏 hay 𝑎|𝑐.

Bài 3.4

Tìm thương số và phần dư khi thực hiện phép chia:

Một phần của tài liệu Tài liệu hỗ trợ học tập môn học toán dùng trong tin học (Trang 46 - 62)

Tải bản đầy đủ (PDF)

(155 trang)