Các Thuật Toán Cơ Bản Trong Lý Thuyết Số.pdf

89 16 0
Các Thuật Toán Cơ Bản Trong Lý Thuyết Số.pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Untitled ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KHOA HỌC NGUYỄN THÙY DUNG CÁC THUẬT TOÁN CƠ BẢN TRONG LÝ THUYẾT SỐ LUẬN VĂN THẠC SĨ TOÁN HỌC Thái Nguyên Năm 2014 ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KHOA HỌ[.]

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KHOA HỌC NGUYỄN THÙY DUNG CÁC THUẬT TOÁN CƠ BẢN TRONG LÝ THUYẾT SỐ LUẬN VĂN THẠC SĨ TOÁN HỌC Thái Nguyên - Năm 2014 ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KHOA HỌC NGUYỄN THÙY DUNG CÁC THUẬT TOÁN CƠ BẢN TRONG LÝ THUYẾT SỐ Chuyên ngành: PHƯƠNG PHÁP TOÁN SƠ CẤP Mã số : 60.46.01.13 LUẬN VĂN THẠC SĨ TOÁN HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC PGS TS TẠ DUY PHƯỢNG Thái Nguyên - Năm 2014 i Mục lục Mục lục i Mở đầu Nội dung Các thuật toán lý thuyết số 1.1 Tìm thương số dư 1.2 Thuật toán Euclid phân tích số thừa số nguyên tố 1.3 Thuật tốn tìm ước số chung lớn 1.4 Thuật tốn tìm bội số chung nhỏ 12 1.5 Thuật toán Lucas - Lehmer tìm số nguyên tố 15 1.6 Thuật tốn Miller tìm số giả nguyên tố 18 1.7 Một số thuật tốn mật mã cơng khai 23 1.8 Một số thuật toán khác 28 Lập trình thực thi máy tính số thuật tốn số học 30 2.1 Tìm thương số dư 30 2.2 Kiểm tra số nguyên tố 43 2.3 Phân tích số thừa số nguyên tố 50 2.4 Tìm ước chung lớn 59 i 2.5 Tìm bội chung nhỏ 66 2.6 Tìm số nguyên tố đứng sau đứng trước số tự nhiên 74 2.7 Một số ứng dụng lý thuyết mật mã 75 2.8 Maple số giả thuyết số nguyên tố 77 Kết luận 82 Tài liệu tham khảo 84 ii LỜI CẢM ƠN Với lịng kính trọng biết ơn sâu sắc em xin chân thành cảm ơn thày PGS TS Tạ Duy Phượng hướng dẫn bảo tận tình cho em suốt trình làm luận văn Thầy không truyền thụ tri thức khoa học mà dẫn cho em phương pháp làm việc tốt lời động viên khuyến khích kịp thời Em xin gửi lời cảm ơn chân thành đến Ban giám hiệu, phịng Đào tạo, khoa Tốn - Tin Trường ĐHKH, Đại học Thái Nguyên tạo điều kiện thuận lợi suốt trình học tập trường Xin chân thành cảm ơn gia đình, bạn bè đồng nghiệp thành viên lớp cao học toán K6B quan tâm, động viên, giúp đỡ em suốt thời gian học tập trình làm luận văn Thái Nguyên, 2014 Nguyễn Thùy Dung Mở đầu Cùng với phát triển máy tính điện tử, tin học ngày xâm nhập sâu vào chương trình giảng dạy tốn, chí cấp phổ thơng Một số thuật tốn lý thuyết số biết đến từ thời Euclid Tuy nhiên, thực thi chúng với số lớn không dễ dàng máy tính điện tử Cùng với phát triển toán tin học, nhiều thuật toán đời, đáp ứng đòi hỏi thực tế (mật mã hóa cơng khai, phân tích số ngun tố lớn, ) Vì vậy, ngành số học thuật tốn đời Việc tổng hợp, nghiên cứu xây dựng chương trình tính tốn số học cơng việc thú vị hữu ích Để đáp ứng nhu cầu học tập giảng dạy, tác giả chọn đề tài “ Các thuật toán lý thuyết số” Luận văn bao gồm phần mở đầu, hai chương, kết luận danh mục tài liệu tham khảo Chương Các thuật toán lý thuyết số Trình bày thuật tốn Lý thuyết số (tìm ước số chung lớn nhất, bội số chung nhỏ nhất, tìm số dư thương chia số nguyên cho số nguyên khác, thuật tốn Euclid phân tích số thừa số ngun tố, thuật tốn Lucas- Lehmer tìm số ngun tố, thuật tốn Miller tìm số giả ngun tố) Chương Lập trình thực thi máy tính điện tử số thuật tốn số học Trình bày chương trình có sẵn tự lập trình cho thuật toán nêu chương Thực thi máy tính điện tử khoa học (Vinacal 570ES Plus II), chương trình Pascal chương trình tính tốn Maple Chương Các thuật toán lý thuyết số Chương trình bày số thuật toán liên quan đến ước chung lớn nhất, bội chung nhỏ nhất, tìm số nguyên tố, phân tích số thừa số nguyên tố Các vấn đề trình bày chương tham khảo trích dẫn chủ yếu từ số tài liệu [4], [5], [6] 1.1 Tìm thương số dư Cơ sở lý thuyết phép chia với dư định lý phép chia có dư Định lý ứng dụng giải thuật Euclid tìm ước chung lớn hai số nguyên khác Định lý phép chia với dư: Với hai số tự nhiên a b (a > b), tìm số q r cho a = qb + r, ≤ r < b Khi r = ta nói a chia hết cho b hay b chia hết a Ta nói a bội số b hay b ước số a Các số nguyên định lý gọi sau: q gọi thương chia a cho b r gọi số dư chia a cho b b gọi số chia a gọi số bị chia Phép tốn tìm q r gọi phép chia với dư Chứng minh Trước tiên ta nhớ lại Tiên đề Archimede Với số thực x > số thực y tồn số tự nhiên n cho nx > y Hệ Với số thực x < số thực y tồn số tự nhiên n cho nx < y Nguyên lý thứ tự tốt Mọi tập khác rỗng số tự nhiên có phần tử bé Chứng minh định lý gồm hai phần: chứng minh tồn q r, thứ hai, chứng minh tính q r Sự tồn Xét tập hợp S = {a − nb, n ∈ Z} Ta khẳng định S chứa số ngun khơng âm Có hai trường hợp sau Nếu b < 0, −b > 0, theo tính chất Archimede, có số ngun n cho −bn ≥ −a, nghĩa a − bn ≥ Nếu b > 0, theo tính chất Archimede, có số nguyên n cho bn ≥ −a, nghĩa a − b (−n) = a + bn ≥ Như S chứa số nguyên không âm Theo nguyên lý thứ tự tốt, S có số ngun khơng âm nhỏ nhất, ta gọi số r a−r Đặt q = , q r số nguyên a = qb + r Ta phải b ≤ r < |b| Tính khơng âm r rõ ràng theo cách chọn r Ta chứng tỏ dấu bất đẳng thức thứ hai Giả sử ngược lại r ≥ |b| Vì b 6= 0, r > nên b > b < Nếu b > 0, r ≥ b suy a − qb ≥ b Từ a − qb − b ≥ 0, lại dẫn tới a − (q + 1) b ≥ Đặt r = a − (q + 1) b r ∈ S r = a − (q + 1) b = r − b < r, điều ′ ′ ′ mâu thuẫn với tính chất r phần tử không âm nhỏ S Nếu b < r ≥ −b a − qb ≥ −b Từ suy a − qb + b ≥ 0, tiếp tục suy r = a−(q − 1) b ≥ Do đó, r ∈ S r = r+b với b < ′ ′ ′ ta có r = a − (q − 1) b < r, mâu thuẫn với giả thiết r số nguyên không ′ âm nhỏ S Như ta chứng minh tồn q r Tính Giả sử tồn q , q , r, r với ≤ r, r < |b| cho a = q + r ′ ′ ′ a = q + r Khơng tính tổng qt giả sử q ≤ r  ′ ′ Từ hai đẳng thức ta có b q − q = r − r ′ ′ ′ Nếu b > r ≤ r r < b ≤ b + r , r − r < b Còn ′ ′ ′ b < r ≤ r r < −b ≤ −b + r, − r − r < −b Trong 50 Một số ví dụ áp dụng Bài Chứng minh số sau số Carmichael: 1729, 294409, 56052391, 118901521, 172947529 Bài (Bài 28 [5]) Chứng minh 6601 số Carmichael Bài Chứng minh 1373653 số giả nguyên tố sở 2, không số giả nguyên tố sở 5,7 Bài Chứng minh 25326001 số giả nguyên tố mạnh sở 2, 3,5 không số giả nguyên tố mạnh sở 2.3 Phân tích số thừa số nguyên tố 2.3.1 Tính tốn máy tính điện tử khoa học Vinacal 570ES Plus II Ví dụ 2.20 Phân tích số 29601 thừa số nguyên tố Giải Rõ ràng 29601 không chia hết cho 2, cho 5, chia hết cho 29601 = 9687 × Ta lại có 9867 = 3289 × Vậy 29601 = 9687 × = 3289 × 32 Vì 3289 khơng chia hết ta kiểm tra xem 3289 có chia hết cho khơng Bấm máy ta được: 3289:7=469.8571429 Vậy 3289 không chia hết cho Tiếp tục xem 3289 có chia hết cho 11 khơng: 3289 = 299 × 11 Vì 299 khơng chia hết cho 11 nên ta kiểm tra tiếp xem 299 có chia hết cho 13, 17, 19, 23 không Cuối ta 29601 = 32 × 11 × 13 × 23 Nhận xét 51 Số 29601 không lớn phân tích thừa số tương đối dễ (vì 29601 có ước số nhỏ, 3, 11, 13, 23) Tuy nhiên thuật tốn phân tích thừa số nguyên tố thực tay cho số 29601 vất vả Vì tốn phân tích số thừa số ngun tố, thường thực máy tính với phần mềm dựa thuật tốn phân tích nhanh số thừa số nguyên tố Phân tích số thừa số nguyên tố Vinacal 570ES Plus II Một ưu điểm trội Vinacal 570 ES Plus II so với máy tính khoa học (máy tính bỏ túi) khác chương trình phân tích số thừa số nguyên tố cài đặt máy Để phân tích số thừa số nguyên tố, ta thực thao tác sau Mở máy phím ON , vào tính vượt trội Vinacal 570ES Plus II cách bấm phím: SHIFT Bấm tiếp phím Trên hình hiện: Fact( (factor-phân tích thừa số nguyên tố) Khai báo số cho Bấm phím = để kết Ví dụ 2.21 Phân tích số 8824575375 thừa số nguyên tố Giải Thực qui trình bấm phím ON SHIFT 8824575375 = (35 × 53 × 74 × 112 ) Ví dụ 2.22 Phân tích số 7396812423 thừa số nguyên tố Giải Thực qui trình bấm phím ON SHIFT 7396812423 = (32 × × 11 × 19 × 59 × 547) Nhận xét Với khả tính tốn nhanh vi mạch điện tử, sau bấm phím = , Vinacal 570 ES Plus II phân tích số lớn 10 chữ số thừa số nguyên tố có ba chữ số Nhận xét 10 Tuy nhiên, chương trình Vinacal 570ES Plus II cịn có hạn chế: Vinacal 570 ES Plus II chưa thể phân tích số có chứa 52 số nguyên tố lớn bốn chữ số thừa số nguyên tố Ví dụ 2.23 (Thi học sinh giỏi Giải toán máy tính, Tỉnh Thừa ThiênHuế, Trung học sở, 2006-2007) Phân tích số 9405342019 thành thừa số nguyên tố Giải Thực qui trình bấm phím ON SHIFT 9405342019 = (193 × (1371241)) Thoạt nhìn, ta tưởng 1371241 số nguyên tố Nếu sử dụng Maple, ta thấy [> ifactor(1371241); 11712 Vậy, 1371241 phân tích thừa số nguyên tố 1371241 = 11712 Cố gắng thử phân tích 1371241 số nguyên tố Vinacal 570ES Plus II ON SHIFT 1371241 = (1371241) Như vậy, hạn chế lập trình nhớ, Vinacal 570ES Plus II chưa có khả phân tích số chứa số nguyên tố bốn chữ số Tuy nhiên, Vinacal 570ES Plus II cảnh báo chuyện cách để thừa số ngoặc Ví dụ, kết phân tích số 9405342019 Vinacal 570ES Plus II 193 × (1371241) Số 193 khơng để ngoặc, nghĩa là lũy thừa số nguyên tố, số (1371241) để ngoặc, nghĩa hợp số chứa số nguyên tố có nhiều ba chữ số Thử khai 1371241 ta 1371241 = 11712 √ Vì 1171 ≈ 34.2 nên ta cần kiểm tra xem 1171 có chia hết cho số nguyên tố 7, 11, 13, 19, 23, 29, 31 không Ta thấy 1171 không chia hết cho 53 số nên số nguyên tố Vậy 9405342019 = 193 × (1171)2 2.3.2 Lập trình chương trình Pascal Thuật tốn phân tích số thừa số nguyên tố tương tự thuật toán kiểm tra số nguyên tố Điểm khác kiểm tra số nguyên tố ta phải kiểm tra số nhỏ sqrt(n) (căn bậc hai n) có phải ước n hay khơng, cịn phân tích ta việc chia n cho số nguyên số nguyên tố nhỏ Khi khơng chia ta tăng số chia lên đơn vị, q trình phân tích kết thúc n PROGRAM phan tich mot so thua so nguyen to; USES crt; VAR n,i:longint; BEGIN Clrscr; write(’nhap vao so:’); write; readln(n); writeln( ’ket qua phan tich ’) i:=1; write(n,’=’); While n>1 Begin inc(i); while n mod i=0 54 Begin n:= n div i; write(i); if n>1 then write(’.’); End; End; Readln; END Ví dụ 2.24 Nhập vào từ bàn phím số tự nhiên n (n < 1000) Hãy phân tích n thành tích thừa số nguyên tố Chẳng hạn, nhập vào số n = 145 Chạy chương trình Pascal ta có Nhap vao so: n =145 Ket qua phan tich 145= 5.29 2.3.3 Tính tốn Maple Theo thuật tốn Euclid số phân tích thừa số nguyên tố, tức viết dạng tích số nguyên tố Tuy nhiên việc phân tích số lớn thừa số nguyên tố (hoặc chứng tỏ số ngun tố) vất vả, chí khơng thể, địi hỏi nhiều phép tính chia Nhờ Maple, ta cần lệnh ifactor để làm việc Ví dụ 2.25 Phân tích 10000000000000000001 100000000000000000001 thừa số nguyên tố [> ifactor(10000000000000000001); (11)(909090909090909091) [> ifactor(100000000000000000001); 55 (73)(137)(1676321)(5964848081) Ví dụ thú vị chỗ liên quan tới câu hỏi Giáo sư Lại Đức Thịnh nói đến Tuyển tập 30 năm tạp chí THTT, Nxb Giáo dục, 1997, trang 343 : "có số dạng 10 01 với n chữ số số nguyên tố?- chưa có câu trả lời" Với Maple, lặp lại lệnh ifactor, vài phút ta khẳng định tất số dạng với n từ đến 44 hợp số Như vậy, 44 số dạng có số 101 số nguyên tố Ví dụ 2.26 Phân tích số sau thừa số nguyên tố (5) (7) (11) (13) (17) (19) − 2; (5) (7) (11) (13) (17) (19) (23) − 2; Giải (5) (7) (11) (13) (17) (19) (23) (29) − [> ifactor(3*5*7*11*13*17*19-2); (4849843) [> ifactor(3*5*7*11*13*17*19*23-2); (111546433) [> ifactor(3*5*7*11*13*17*19*23*29-2); (43)(167)(450473) Ví dụ liên quan đến giả thuyết: Hiệu tích số nguyên tố liên tiếp An = p2 p3 pn − 2, pk nguyên tố thứ k (p1 = 2, p2 = 3, p3 = 5, ), số nguyên tố với n Trong Tuyển tập 30 năm tạp chí THTT, NXB Giáo dục, 1997, trang 343, Giáo sư Lại Đức Thịnh viết: " Bằng cách thử, ta thấy số A3 , A4 , A5 , A6 , A7 số nguyên tố Có lẽ thử với vài giá trị n ta tìm hợp số Tuy nhiên muốn kiểm tra A8 cần làm 300 phép chia kiểm tra A9 cần 56 1300 phép chia, tức vài buổi làm tính" Dùng Maple, ta thấy A8 , A9 số nguyên tố, A10 hợp số Hơn nữa, cần bỏ vài phút để kiểm tra: 21 số đầu A3 , A4 , A5 , A6 , A7 , A8 ,A9 , A11 ,A13 ,A16 ,A20 số nguyên tố, An cịn lại hợp số Ví dụ 2.27 Phân tích số 211 − 2521 − thừa số nguyên tố [> ifactor(2∧ 11 − 1); (23)(89) [> ifactor(2∧ 521 − 1); (686479766013060971498190079908139321726943530014330540939 44685543183397656052122559640661454554977296311391480858037 12199716643812574028291115057151) Các số gọi số Mersenne, tức số dạng 2p − 1, p số nguyên tố Người ta tìm thấy nhiều số nguyên tố Mersenne: 22 − 1, 23 − 1, 25 − 1, 27 − 1, 213 − 1, 217 − 1, 219 − 1, 231 − 1, 261 − 1, Dùng Maple để thử với p = 521, 607, 1279, 2203, 2281 phút, ta số nguyên tố lớn, ví dụ: 22281 − số nguyên tố với gần 700 chữ số (xem [3]) Ví dụ 2.28 Phân tích số 2(2 ) + thừa số nguyên tố n [> ifactor 2∧ (2∧ 5) + 1; (641)(6700417) n Các số dạng 2(2 ) + (số Fecma) có lịch sử thú vị: Fecma khẳng n định rằng: 2(2 ) + số nguyên tố với n Điều với n = 0, 1, 2, 3, Tuy nhiên, năm 1732 Euler với n = số Fecma hợp số (như ta thấy trên) Ta thấy với n = số Fecma hợp số 57 [> ifactor2∧ (2∧ 6) + 1; (67280421310721)(274177) Số nguyên tố Fecma quan trọng liên quan đến tốn dựng đa giác nội tiếp đường tròn: Gauss chứng minh đa giác m cạnh nội tiếp đường tròn với m số nguyên tố Fecma dựng thước compa m số Fecma Khi chết, Gauss đề nghị khắc mộ ông đa giác 17 cạnh dựng thước compa Hiện nay, số Fecmat nghiên cứu Ví dụ 2.29 Kiểm tra khẳng định Euler: n2 + n + 41 nhận giá trị nguyên tố khác với n = 0, 1, 2, 39 hợp số n = 40 Trước tiên ta định nghĩa hàm f lệnh := sau [> f:=n → 2∧ + n + 41; f := n → n2 + n + 41 Bây ta phân tích f (n) thừa số với giá trị n, [> ifactor(f(39)); (1601) [> ifactor(f(40)); (41)2 [> ifactor(f(41)); (41)(43) Bằng lệnh ifactor(f(n)) ta thấy: n thay đổi từ đến 100 có 14 hợp số f (40), f (41), f (44), f (49), f (56), f (65), f (76), f (81), f (82), f (84), f (87), f (89), f (91), f (96), f (n) lại số nguyên tố Thật đa thức hiếm! Một "của hiếm" là: đa 58 thức x2 − 79x + 1601 nhận giá trị nguyên tố (không phải tất khác nhau) với x = 0, 79 hợp số n = 80 Một số ví dụ áp dụng Bài (Vơ địch Bungari, 1986) Tìm giá trị bé n cho n2 − n + phân tích thành số ngun tố (khơng thiết khác nhau) Bài (Đề thi Giải toán máy tính, Trung học Cơ sở, Sở Giáo dục Đào tạo Sóc Trăng, 2003-2004) Phân tích số 20387 139231 thừa số nguyên tố Bài (Thi học sinh giỏi Giải tốn máy tính, Sở Giáo dục Đào tạo Thừa Thiên-Huế, Trung học sở, 2005-2006) Phân tích số 252633033 8863701824 thừa số nguyên tố Bài (Đề thi Giải toán máy tính, Trung học Cơ sở, Sở Giáo dục Đào tạo Hịa Bình, 2007-2008) Phân tích số 8563513664 244290303 thừa số nguyên tố Bài (Đề thi Giải tốn máy tính, Trung học Cơ sở, Sở Giáo dục Đào tạo Ninh Bình, 2013-2014) Phân tích số A= 414 840 882 357 thừa số nguyên tố 59 2.4 Tìm ước chung lớn 2.4.1 Tính tốn máy tính điện tử Vinacal 570ES Plus II Qui tắc tìm ước số chung lớn (GCD) hai hay nhiều số trình bày lập trình tính Vinacal 570ES Plus II sau Trước tiên bấm phím ON để mở máy Vào tính vượt trội Vinacal 570ES Plus II cách bấm phím: SHIFT (VINACAL) 1: Q r (tìm thương số dư) 2: LCM (tìm bội số chung nhỏ nhất) 3: GCD (tìm ước số chung lớn nhất) 4: FACT (phân tích số thừa số nguyên tố) 5: lim (tính giới hạn) 6: MinMax (tìm giá trị lớn nhỏ hàm bậc hai) Để tìm ước số chung lớn ta bấm phím Trên hình GCD( Khai báo số, đánh dấu phẩy phân cách số cách bấm phím SHIFT , , bấm phím = để kết hình Ví dụ 2.30 (Đề chọn đội tuyển thi học sinh giỏi giải tốn máy tính cấp khu vực, Sở Giáo dục Đào tạo Thái Nguyên, 2004) Cho a=75125232, b=1754298000 Tìm ƯCLN a b Cách giải (trên Vinacal 570ES Plus II) Mở máy phím ON vào tính vượt trội Vinacal 570 ES Plus II cách bấm phím SHIFT Bấm tiếp phím vào chương trình tính ước số chung lớn Trên hình GCD( Khai báo số cho (ngăn cách số phím SHIFT để kết Tồn qui trình bấm phím viết lại sau: , Bấm phím = 60 ON SHIFT 1754298000 SHIFT , 75125232 = (825552) Đáp số ƯCLN 1754298000 75125232 825552 Nhận xét 11 Sau bấm phím SHIFT , thao tác khai báo số, ta có kết Với máy tính khác với Vinacal 570 ES Plus II (mà khơng dùng SHIFT ), ta phải sáng tạo thủ công, khơng cần thiết sau a bấm phím = để Cách giải Khai báo phân số nhờ phím   b 2125 75125232 ( phân số tối giản 1754298000  ) =  91 Chia a = 1754298000 cho 2125 (hoặc chia b = 75125232 cho 91) để ƯCLN a b : 1754298000 ÷ 2125 = (825552) hay 75125232 ÷ 91 = (825552) Đáp số: ƯCLN a b 825552 Giải thích Giả sử d ước số chung lớn (ƯCLN) a b Khi a da1 a1 a1 ta có = , phải phân số tối giản Thật vậy, chưa b db1 b1 b1 ka2 a da1 dka2 a1 = (k > 1) Khi = = phải phân số tối giản, tức b1 kb2 b db1 dkb2 dk > d ước của a b Mâu thuẫn với d ước số chung lớn a b Như vậy, để tìm ƯCLN hai số a b, trước tiên ta tối giản phân số a a1 , phân số (tự động thực máy sau khai báo phân b b1 số bấm phím = ) Sau lấy a chia cho a1 (hoặc lấy b chia cho b1 , thương d, ƯCLN hai số a b Ví dụ 2.31 Cho a= 1908, b=2756, c=48760 Tìm ƯCLN(a, b, c) Cách Thực qui trình bấm phím ON (212) SHIFT 1908 SHIFT , 2756 SHIFT , 48760 = 61 Đáp số: ƯCLN(a, b, c)=212 Cách ƯCLN(a, b, c)= (ƯCLN(ƯCLN(a, b), c) Áp dụng cho ba số a= 1908, b=2756, c=48760 ta có a 1908 = = b 2756 13 a 1908 = 212 Do ƯCLN(a, b) = = 9 212 48760 Ta có = Do ƯCLN(212, c) = = 212 48760 230 230 Vậy ƯCLN(a, b, c)=212 2.4.2 Lập trình chương trình Pascal Cách Sử dụng thuật toán Euclide ƯCLN số x, y ƯCLN số y x mod y , ta gán xbằng y , y x mod y y Khi ƯCLN x PROGRAM Tim ƯCLN cua hai so; VAR a,b,r : integer; BEGIN Write (’nhap so a= ’); read (a); Write (’nhap so b= ’); read (b); Writeln( ’UCLN cua’, a , ’va’, b, ’la ’ ); WHILE b > DO Begin r := a mod b; a := b; b := r; End; Write( a ); END 62 Cách Dưới thuật tốn tìm ƯCLN cách trừ PROGRAM Chuong trinh tim ƯCLN; USES crt; VAR x,y,ƯCLN:integer; BEGIN Clrscr; writeln(’ban hay nhap vao so bat ky:’); writeln(’So thu nhat:’); readln(x); writeln(’So thu hai:’); readln(y); BCNN:=x*y; WHILE xy DO if x>y then x:=x-y else y:=y-x; UCLN:=x; writeln(’Ket qua la:’); writeln(’UCLN:’); write(UCLN); Readln; END Cách Tìm ƯCLN cách dùng đệ quy Đệ quy hiểu đơn giản gọi nhiều lần chương trình chương trình Thực sự, tốn đơn giản, khơng sử dụng đệ quy làm phức tạp vấn đề làm chương trình trở nên rắc rối, phải thực nhiều phép tính Tuy nhiên, bắt buộc phải dùng đệ quy tham khảo cách làm (xem SGK Tin học 10): function gcd(a, b); begin if (a igcd(2121988,15091987); Phân tích 2121988 thừa số nguyên tố: [> ifactor(2121988); (2)2 (11) (29) (1663) Phân tích 15091987 thừa số nguyên tố: [> ifactor(15091987); (4493)(3359) Hai số 2121988 15091987 khơng có thừa số ngun tố chung ƯCLN chúng phải Ví dụ 2.34 Tìm ước số chung lớn số 21988 − 22014 − [> igcd(2∧ 1988-1,2∧ 2014-1); Ví dụ 2.35 Tìm ước số chung lớn số 21988 − 21987 − 64 [> igcd(2∧ 1988-1,2∧ 1987-1); Nhận xét 12 Hai ví dụ hay chỗ: số 21988 − 1, 22014 − 21987 − lớn (khoảng 600 chữ số), nhiên với Maple ta dễ dàng tìm ước chung lớn chúng Nhận xét 13 Muốn tìm ước chung lớn nhiều số ta tìm hai số trước Ví dụ 2.36 Tìm ước số chung lớn số 2000, 1980 1910 Trước tiên ta tìm ƯCLN 2000 1980 20, sau tìm ƯCLN 20 1910 [> igcd(2000,1980); 20 [> igcd(1910,20); 10 Phân tích số 1980 thừa số nguyên tố: [> ifactor(1980); (2)2 (3)2 (5) (11) Phân tích số 1910 thừa số nguyên tố: [> ifactor(1910); (2) (5) (191) Phân tích số 2000 thừa số nguyên tố: [> ifactor(2000); (2)4 (5)3 Phân tích số 10 thừa số nguyên tố: [> ifactor(10); (2) (5)

Ngày đăng: 18/06/2023, 16:12

Tài liệu cùng người dùng

Tài liệu liên quan