Lời nói đầu Trong năm gần đây, phát triển Tin học đà làm thay đổi nhiều ngành truyền thống Lí thuyết số (trong sách này, chóng ta th−êng dïng tõ “Sè häc”) NÕu nh− tr−íc thập kỷ 70, số học đợc xem ngành lí thuyết xa rời thực tiễn nhất, ngày nay, nhiều thành tựu số học có ứng dụng trực tiếp vào vấn đề đời sống, nh thông tin, mật mÃ, kĩ thuật máy tính Một phơng hớng số học đời phát triển mạnh mẽ: số học thuật toán Có thể nói, cầu nối số häc víi tin häc Víi viƯc sư dơng réng r·i máy tính nghiên cứu số học, nhiều ngời cho rằng, số học ngày đà thành khoa học thực nghiệm! Điều thể rõ thuật toán xác suất đợc đề cập đến sách V V n nM M a at th h C C o om m Mơc ®Ých cđa cn sách nhỏ cung cấp cho ngời đọc số kiến thức sơ số học thuật toán Cuốn sách không đòi hỏi ngời đọc kiến thức chuẩn bị lý thuyết số Vì gọi Nhập môn thuật toán vào số học Điều có nghĩa là, nhiều đờng khác để vào số học, ta chọn đờng thuật toán: định lí, khái niệm số học đợc trình bày với thuật toán xây dựng chúng Trong nhiều trờng hợp, thuật toán có kèm theo đánh giá sơ độ phức tạp Cuốn sách nhằm số đối tợng rộng rÃi: sinh viên, nghiên cứu sinh số học tin học, ngời quan tâm đến lí thuyết ứng dụng số học đại Nhiều phần sách có ích cho học sinh lớp chuyên toán chuyên tin học Chơng sách đợc dành để giới thiệu vài định nghĩa lí thuyết thuật toán Ba chơng trình bày vấn đề sở số học Chơng 5, việc chuẩn bị kiến thức cho phần tiếp theo, có bình luận nhiều vai trò tơng tự số đa thức phát triển số học đại Để ngời đọc hình dung phần ứng dụng số học thuật toán, sách dành chơng để nói lí thuyết mật mà Một vài ứng dụng gần lí thuyết đờng cong elliptic vào mật mà đợc trình bày chơng Cũng xem Chơng nhập môn ngắn sơ cấp vào lí thuyết đờng cong elliptic, lí thuyết phong phú Hình học đại số số học Cuối chơng có số tập dành cho độc giả muốn đọc sách cách tích cực Mét sè bµi tËp mang tÝnh chÊt lun tËp vµ tính toán thực hành, số khác mở rộng lí thuyết Trừ chơng cuối đờng cong elliptic, chơng lại có kèm theo hớng dẫn thực hành tính toán chơng trình MAPLE Phần hớng dẫn thực hành Tạ Thị Hoài An biên soạn Cuối sách có phần tự kiểm tra kiến thức dành cho độc giả học giáo trình với trợ giúp máy tính Do nhiều nguyên nhân khác nhau, sách chắn nhiều thiếu sót Tác giả hy vọng nhận đợc lời phê bình bạn đọc Hà nội, 1998 Hà Huy Khoái i Chơng thuật toán Đ1 Định nghĩa V V n nM M a at th h C C o om m Có thể định nghĩa thuật toán theo nhiều cách khác ý định trình bày chặt chẽ thuật toán nh giáo trình logic, mà hiểu khái niệm thuật toán theo cách thông thờng Thuật toán qui tắc để, với liệu ban đầu đà cho, tìm đợc lời giải sau khoảng thời gian hữu hạn Để minh hoạ cách ghi thuật toán, nh tìm hiểu yêu cầu đề cho thuật toán, ta xét ví dụ cụ thể sau Cho n số X[1], X[2], , X[n], ta cần tìm m j cho m=X[j] = max X[k], vµ j lµ 1≤ k ≤ n lín Điều có nghĩa cần tìm cực đại số đà cho, số lớn số đạt cực đại Với mục tiêu tìm số cực đại với số lớn nhất, ta xuất phát từ giá trị X[n] Bớc thứ nhất, có số, ta tạm thêi xem m=X[n] vµ j=n TiÕp theo , ta so sánh X[n] với X[n-1] Trong trờng hợp n-1=0, tức n=1, tht to¸n kÕt thóc NÕu X[n-1] ≤ X[n] , ta chuyển sang so sánh X[n] với X[n-2] Trong trờng hợp ngợc lại, X[n-1] số cực đại hai số đà xét, ta phải thay đổi m j: đặt m= X[n-1], j=n-1 Với cách làm nh trên, bớc, ta nhận đợc số cực đại số đà xét Bớc so sánh với số đứng trớc, kết thúc thuật toán trờng hợp không số đứng trớc Thuật toán mô tả đợc ghi lại nh sau: Thuật toán tìm cực đại M1 [Bớc xuất phát ] Đặt jn, kn-1, m X[n] M2 [Đà kiĨm tra xong?] NÕu k=0, tht to¸n kÕt thóc M3 [So sánh] Nếu X[k]m,chuyển sang M5 M4 [Thay đổi m] cực đại) Đặt j k, m X[k] (Tạm thời m M5 [Giảm k] Đặt k k-1, quay vỊ M2 DÊu “←“ dïng ®Ĩ chØ mét phép toán quan trọng phép thay chỗ (replacement) Trên ta ghi thuật toán ngôn ngữ thông thờng Trong trờng hợp thuật toán đợc viết ngôn ngữ máy tính, ta có chơng trình Trong thuật toán có số liệu ban đầu, đợc cho trớc thuật toán bắt đầu làm việc: đầu vào (input) Trong thuật toán M, đầu vào c¸c sè X[1], X[2], , X[n] Mét thuËt to¸n cã thể có nhiều đầu (ouput) Trong thuật toán M, đầu m j Có thể thấy thuật toán vừa mô tả thoả mÃn yêu cầu thuật toán nói chung, lµ: V V n nM M a at th h C C o om m Tính hữu hạn.Thuật toán cần phải kết thúc sau số hữu hạn bớc Khi thuật toán ngừng làm việc, ta phải thu đợc câu trả lời cho vấn đề đặt Thuật toán M rõ ràng thoả mÃn điều kiện này, bớc, ta chuyển từ việc xét số sang số đứng trớc nó, số số hữu hạn Tính xác định bớc, thuật toán cần phải xác định, nghĩa rõ việc cần làm Nếu ngời đọc, thuật toán M cha thoả mÃn điều kiện lỗi ngời viết! Ngoài yếu tố kể trên, ta phải xét đến tính hiệu thuật toán Có nhiều thuật toán, mặt lí thuyết kết thúc sau hữu hạn bớc, nhiên thời gian hữu hạn vợt khả làm việc Những thuật toán không đợc xét đến đây, quan tâm thuật toán sử dụng thật máy tính Cũng mục tiêu nói trên, ta phải ý đến độ phức tạp thuật toán Độ phức tạp thuật toán đo không gian, tức dung lợng nhớ máy tính cần thiết để thực thuật toán, thời gian, tức thời gian máy tính làm việc Trong sách này, nói đến độ phức tạp thuật toán, ta hiểu độ phức tạp thời gian Đ2 Độ phức tạp thuật toán Dĩ nhiên, thời gian làm việc máy tính chạy thuật toán không phụ thuộc vào thuật toán, mà phụ thuộc vào máy tính đợc sử dụng Vì thế, để có tiêu chuẩn chung, ta đo độ phức tạp thuật toán số phép tính phải làm thực thuật toán Khi tiến hành thuật toán, số phép tính phải thực phụ thuộc vào cỡ toán, tức độ lớn đầu vào Vì thế, độ phức tạp thuật toán hàm số độ lớn đầu vào Trong ứng dụng thực tiễn, không cần biết xác hàm này, mà cần biết cỡ chúng, tức cần có ớc lợng đủ tốt chúng Khi làm việc, máy tính thờng ghi chữ số bóng đèn sáng, tắt: bóng đèn sáng số 1, bóng đèn tắt số Vì thuận tiện dùng hệ ®Õm c¬ sè 2, ®ã ®Ĩ biĨu diƠn mét số, ta cần dùng hai kí hiệu Một kí hiệu đợc gọi bit (viết tắt chữ binary digit) Một số nguyên n biểu diễn k chữ số dợc gọi số k-bit Trong chơng tiếp theo, ta sÏ thÊy r»ng, sè tù nhiªn n sÏ lµ mét sè k-bit víi k=[log2n] ( dÊu[ ] kÝ hiệu phần nguyên số) Độ phức tạp thuật toán đợc đo số phép tÝnh bit PhÐp tÝnh bit lµ mét phÐp tÝnh logic hay số học thực số 1-bit Để ớc lợng độ phức tạp thuật toán, ta dùng khái niệm bậc O-lớn Định nghĩa 1.1: Giả sử f(n) g(n) hai hàm xác định tập hợp số nguyên dơng Ta nói f(n) có bậc O-lớn g(n), viết f(n)=O(g(n)) f=O(g), nÕu tån t¹i mét sè C >0 cho víi n đủ lớn, hàm f(n) g(n) dơng, ®ång thêi f(n) < Cg(n) VÝ dơ 1) Gi¶ sư f(n) đa thức; f(n)=adnd + ad-1nd-1 + +a1n+a0, V V n nM M a at th h C C o om m ®ã ad > DƠ chøng minh r»ng f(n)=O(nd) 2) NÕu f1(n)=O(g(n)), f2(n)=O(g(n)) th× f1+f2=O(g) 3) Nếu f1=O(g1), f2=O(g2), f1.f2=O(g1.g2) 4) Nếu tồn giới hạn hữu hạn lim n f ( n) g ( n) th× f=O(g) 5)Víi mäi sè ε >0, log n=O(n ) Định nghĩa 1.2 Một thuật toán đợc gọi có độ phức tạp đa thức, có thời gian đa thức, số phép tính cần thiết thực thuật toán không vợt O (logd n), n độ lớn đầu vào, d số nguyên dơng Nói cách khác, đầu vào số k-bit thời gian thực thuật toán O(kd), tức tơng đơng với đa thức k Các thuật toán với thời gian O(n ), >0, đợc gọi thuật toán với độ phức tạp mũ, thêi gian mị Chó ý r»ng, nÕu mét tht to¸n có độ phức tạp O(g), nói độ phức tạp O(h) với hàm h > g Tuy nhiên, ta luôn cố gắng tìm ớc lợng tốt đợc để tránh hiểu sai độ phức tạp thực thuật toán Cũng có thuật toán có độ phức tạp trung gian đa thức mũ Ta thờng gọi thuật toán dới mũ Chẳng hạn, thuật toán nhanh đợc biết để phân tích số nguyên n thừa số thuật toán có ®é phøc t¹p exp( log n log log n ) Khi giải toán, ta cố gắng tìm thuật toán đó, mà muốn tìm thuật toán tốt Đánh giá độ phức tạp cách để phân tích, so sánh tìm thuật toán tối u Tuy nhiên, độ phức tạp tiêu chuẩn để đánh giá thuật toán Có thuật toán, lí thuyết có độ phức tạp cao thuật toán khác, nhng sử dụng lại có kết (gần đúng) nhanh nhiều Điều tuỳ thuộc toán cụ thể, mục tiêu cụ thể, kinh nghiệm ngời sử dụng Chúng ta cần lu ý thêm điểm sau Mặc dù định nghĩa thuật toán mà đa cha phải chặt chẽ, cứng nhắc ứng dụng thực tế! Bởi vậy, cần đến thuật toán xác suất , tức thuật toán phụ thuộc vào hay nhiều tham số ngẫu nhiên Những thuật toán này, nguyên tắc không đợc gọi thuật toán, chúng có thể, với xác suất bé, không kết thúc Tuy nhiên, thực nghiệm rằng, thuật toán xác suất thờng hữu hiệu thuật toán không xác suất Thậm chí, nhiều trờng hợp, có thuật toán nh sử dụng đợc V V n nM M a at th h C C o om m Khi làm việc với thuật toán xác suất, ta thờng hay phải sử dụng số ngẫu nhiên Khái niệm chọn số ngẫu nhiên cần đợc xác hoá Thờng ngời ta sử dụng máy sản xuất số giả ngẫu nhiên Tuy nhiên, sách này, không đề cập đến vấn đề nói trên, mà lần nói đến việc chọn số ngẫu nhiên, ta hiểu điều thực đợc máy Cũng cần lu ý rằng, thuật toán xác suất, nói đến thời gian tuyệt đối, mà nói đến thời gian hy vọng (expected ) Để hình dung đợc phần độ phức tạp thuật toán làm việc với số lớn, ta xem bảng dới cho khoảng thời gian cần thiết để phân tích số nguyên n thừa số thuật toán nhanh đợc biết (ta xem máy tính sử dụng vào việc có tốc độ triệu phép tính giây) Số chữ số thập phân Sè phÐp tÝnh bit Thêi gian 50 1,4.1010 3,9 giê 75 9,0.1012 104 ngày 100 2,3.1015 74 năm 200 1,2.1023 3,8.109 năm 300 1,5.1029 4,9.1015 năm 500 1,3.1039 4,2.1025 năm Từ bảng đây, ta thấy rằng, với thuật toán dới mũ, thời gian làm việc với số nguyên lớn lâu Vì nói chung ngời ta cố gắng tìm thuật toán đa thức Lí thuyết độ phức tạp thuật toán lí thuyết phong phú Trong sách này, không lấy mục tiêu trình bày lí thuyết làm trọng tâm Độc giả quan tâm đến lí thuyết thuật toán tìm đọc sách phần Tài liệu tham khảo Chơng Số nguyên Đ1 Biểu diễn số nguyên phép tính số häc 1.1 HƯ c¬ sè V V n nM M a at th h C C o om m MỈc dù hầu hầu hết độc giả đà quen thuộc với cách biểu diễn số nguyên số tuỳ ý, nhắc lại sơ qua vấn đề phần này, để thuận tiện cho việc trình bày thuật toán số nguyên Định lí 2.1 Giả sử b số nguyên lớn Khi mäi sè nguyªn n cã thĨ viÕt nhÊt d−íi dạng n=akbk + ak-1bk-1 + + a1b1 +a0, aj số nguyên, aj k-1, với j=0,1, ,k hệ số ak Chứng minh Ta cần thực liên tiếp phép chia n cho b: n=bq0 +a0, ≤ a0 ≤ b-1 NÕu q0 >b, ta tiÕp tôc chia q0 cho b để đợc q0=bq1 +a1, a1 b-1 Tiếp tục trình đó, ta có: q1=bq2 +a2, ≤ a2 ≤ b-1 q2=bq3 +a3, ≤ a3 ≤ b-1 qk-1=b.0 +ak, ≤ ak ≤ b-1 Quá trình kết thúc ta có: n>q0>q1> Chúng dành cho độc giả việc chứng minh n có dạng nh phát biểu định lí, biểu diễn Số b nói định lí đợc gọi số biểu diễn Các hệ biểu diễn số 10 tơng ứng đợc gọi hệ thập phân nhị phân Các hệ số aj đợc gọi chữ số Về sau ta dùng bit để chữ số nhị phân Nếu số nguyên n biểu diễn số b có k chữ số, từ chøng minh trªn, ta cã : bk-1 ≤ n ≤ bk Nh số chữ số n đợc tính theo c«ng thøc: k=[logb n]+1=[log n / log b]+1, đó, kí hiệu log dùng để logarit sè e Trong c¬ sè tuú ý, ta cã: k=O(logn) Để phân biệt biểu diễn số nguyên hệ số khác nhau, ta thờng dùng cách viÕt (akak-1 a1a0)b ®Ĩ chØ sè n= akbk + ak-1bk-1 + + a1b1 +a0, VÝ dơ 1) §èi víi sè 1994 hƯ thËp ph©n, ta cã (1994)10=(11111001010)2 V V n nM M a at th h C C o om m 2) Trong máy tính, bên cạnh hệ sè 2, ng−êi ta cịng th−êng dïng hƯ c¬ sè 16 Lí chủ yếu việc chuyển số viết số sang số số đợc thực cách dễ dàng Ví dụ, muốn chuyển số cho c¬ sè sang c¬ sè 8, ta việc nhóm từ phải sang trái khối chữ số, chuyển số đợc viết khối sang dạng thập phân Chẳng hạn, số (1110010100110)2 đợc tách thành nhóm 1,110,010,100,110 Từ ta đợc: (1110010100110)2=(16246)8 Ta làm tơng tự để chuyển số đà cho thành số viết số 16, cần nhóm thành chữ số Chú ý rằng, trờng hợp này, cần thêm vào kí hiệu để chữ số từ 10 đến 15 Ta nhắc lại máy tính sử dụng cách viết nhị phân, bit Máy tính có giới hạn độ lớn số đa vào tính toán Giới hạn đợc gọi cỡ từ máy, kí hiệu qua w Cỡ từ thờng luỹ thừa 2, chẳng hạn 235 Để thực phép tính số học với số nguyên lớn cỡ từ, ta làm nh sau Muốn đa số n > w vào máy, ta viết n dới dạng số w, n đợc biểu diễn số không vợt qu¸ cì tõ VÝ dơ, nÕu cì tõ cđa m¸y 235, để đa vào số có độ lín cì 2350-1, ta chØ cÇn dïng 10 sè nhá nhỏ cỡ từ máy, cách biểu diễn n số 235 Nh đà nói ví dơ ë 1, viƯc chun mét sè tõ c¬ sè sang số 235 đợc thực dễ dàng cách nhóm khối 35 chữ số Từ qui tắc phép tính số học, ta thấy rằng: 1) Để cộng trừ hai số nguyên k bit, ta cần O(k) phép tính bit 2) Để nhân chia hai số k bit theo qui tắc thông thờng, ta cần O(k2) phép tính bit Trong thập kỉ gần đây, ngời ta tìm thuật toán nhân với độ phức tạp bé nhiều so với cách nhân thông thòng Điều thú vị là, nhìn thuật toán phức tạp quy tắc nhân thông thờng Tuy nhiên, làm việc với số lớn, thuật toán cho phép thực hiƯn viƯc nh©n hai sè víi mét thêi gian bÐ hẳn so với quy tắc thông thờng 1.2 Thuật toán nhân nhanh hai số Ta sử dụng tính chất đơn giản phép nhân: a=a1+a2, b=b1+b2, ab=a1b1+a2b2+a2b1+a1b2 Điều đáng ý là, thay cho việc nhân hai số nguyên n bit, ta thực việc nhân số có chữ số nhỏ hơn, với số phép cộng (đòi hỏi số phép tính bit phép nhân) Thực điều mới: quan niệm ban đầu, phép nhân a với b đà phép cộng b lần số a! Tuy nhiên để có thuật toán nhân nhanh, ta cộng b lần số a, mà phải tìm đợc cách tối u để tách b a thành phần nhỏ Những thuật toán trình bày dới cho số cách để làm việc phân chia nh Giả sử muốn nhân hai số nguyên 2n bit, a=(a2n-1a2n-2 a1a0)2, b=(b2n-1b2n-2 b1b0)2 V V n nM M a at th h C C o om m Ta viÕt a=2nA1+A0, b=2nB1+B0, ®ã A1=(a2n-1a2n-2 an)2, A0=(an-1an-2 a1a0)2, B1=(b2n-1b2n-2 bn)2, B0=(bn-1bn-2 b1b0)2 Khi ®ã ta cã: ab=(22n+2n)A1B1+2n(A1 - A0)+(2n+1)A0B0 (1.1) Nh− vËy, viƯc nh©n hai sè a,b 2n bit đợc đa việc nhân số n bit, với phép cộng, trừ dịch chuyển (nhân số với luỹ thừa bậc n đợc thực cách dịch số sang trái n vị trí) Định lí 2.2 Thuật toán 2.1 có độ phức tạp O(nlog23) Chứng minh Gọi M(n) số phép tính bit tối đa cần thiết thực nhân hai số nguyên n bit thuật toán 2.1 Tõ c«ng thøc (1.1) ta cã: M(2n) ≤ 3M(n)+Cn, C số không phụ thuộc n Đặt c=max(C,M(2)) Bằng quy nạp, dễ chứng minh đợc r»ng M(2k) ≤ c(3k-2k) Tõ ®ã ta cã M(n)=M(2log2n) ≤ M(2[log2n]+1) c(3[log2n]+1-2[log2n]+1) 3c.3[log2n] 3c.3log2n=3cnlog23 Định lí đà đợc chứng minh Với thuật toán 2.1, ta thấy rằng, với cách phân chia đơn giản số nguyên thành hai phần với số chữ số nhau, ta đà nhận đợc thuật toán giảm đáng kể thời gian thực phép nhân Dĩ nhiên, cách phân chia nh xa với cách phân chia tối u Ta chứng tỏ cách phân chia nh tổng quát hoá để nhận đợc thuật toán nhân với độ phức tạp nhỏ nhiều Cũng nh trớc đây, ta kí hiệu qua M(n) số phép tính bit cần thiết để thực phép nhân hai số nguyên n bit Trớc tiên, ta chứng minh công thức sau: với số tự nhiên n, tồn thuật toán cho: M((r+1)n) (2r+1)M(n)+Cn, (1.2) với C số Nh vậy, Định lí 2.2 trờng hợp riêng với r=1 Giả sử cần nhân hai số (r+1)n bit: a=(a(r+1)n-1 a1a0)2, b=(b(r+1)n-1 b1b0)2 Ta tách số a,b thành r+1 số h¹ng: V V n nM M a at th h C C o om m a=Ar2rn+ +A12n+A0 b=Br2rn+ +B12n+B0, Aj,Bj số n bit Ta nhận xét rằng, việc biểu diễn số nguyên dới dạng số gần giống nh viết số dới dạng đa thức, chữ số hệ số đa thức Vì việc nhân hai số thực tơng tự nh việc nhân đa thức Ta xét đa thức sau: A(x)=Arxr+ +A1x+A0, B(x)=Brxr+ +B1x+B0, W(x)=A(x)B(x)=W2rx2r+ +W1x+W0 Từ định nghĩa đa thức ta đựơc: a=A(2n),b=B(2n), ab= W(2n) Nh vậy, ta dễ dàng tính đợc tích ab biết đợc hệ số đa thức W(x) Công thức (1.2) đợc chứng minh ta tìm đợc thuật toán tính hệ số W(x) mà sử dụng 2r+1 phép nhân số n bit số phép tính khác với độ phức tạp O(n) Điều làm cách tính giá trị đa thức W(x) 2r+1 điểm sau đây: W(0)=A(0)B(0), W(1)=A(1)B(1), , W(2r)=A(2r)B(2r) Chú ý rằng, số Aj,Bj không thiết số n bit, nhng với r cố định, chúng có số chữ số nhiều r+t, với t cố định Dễ thấy rằng, nhân hai số (r+t)-bit với không M(n)+c1n phép tính bit, c1 số (chỉ cần tách số (n+t)-bit thành hai phần n-bit t-bit, nhận xét rằng, t cố định, việc nhân số t-bit với số n-bit đòi hỏi không cn phép tính bit) Khi đà có giá trị W(j),(j=0,1, 2r), ta tìm đợc đa thức W(x) theo công thức Lagrange: 2r W(x)= ∑ ( −1) j W(j) j=0 x(x - 1) (x - j + 1)(x - j - 1) (x - 2r) j!(2r - j)! Nh− vậy, hệ số W(x) tổ hợp tun tÝnh (víi hƯ sè kh«ng phơ thc n) cđa giá trị W(j), đó, tính đựoc O(n) phép tính bit Ta đà chứng minh đợc công thøc sau: M((r+1)n) ≤ (2r+1)M(n)+Cn LËp luËn t−¬ng tù nh− chứng minh định lí 2.1 ta có: M(n) C3nlogr+1(2r+1)0 bÐ t ý, c¸c thõa sè cã sè ch÷ sè rÊt lín, ta cã thĨ chän r ®đ lín cho logr+12< ε Ta có định lí sau: V V n nM M a at th h C C o om m Định lí 2.3 Với >0, tồn thuật toán nhân cho số phép tính bit M(n) cần thiết để nhân hai số n bit thoả mÃn bất đẳng thøc M(n) gcd(157940,78800); 20 VËy −íc chung lín nhÊt cđa 157940 vµ 78864 lµ 20 II Phân tích thừa số nguyên tố Để phân tích số n thừa số nguyên tố ta thùc hiÖn lÖnh sau: 30 [>ifactor(n); Sau dÊu (;) Ên phím Enter việc phân tích n thừa số nguyên tố đợc thực có kết Thí dụ: Phân tích số 122333444455555666666777777788888888999999999 thừa sè nguyªn tè Ta thùc hiƯn nh− sau: [> V V n nM M a at th h C C o om m ifactor(122333444455555666666777777788888888999999999); (3)(12241913785205210313897506033112067347143)(3331) Ta cịng cã thĨ dïng lệnh để kiểm tra xem số n có phải số nguyên tố hay không II Thực hµnh kiĨm tra mét sè lµ sè Carmichael Ta nhí lại Định lí 17 nh sau: Định lí 2.17 Nếu n=q1q2 qk, qj số nguyên tố khác thoả mÃn (qj-1) |(n-1), n sè Carmichael Do ®ã ®Ĩ kiĨm tra xem mét sè n có phải số Carmichael hay không ta thực theo bớc sau: Bớc 1: Phân tích n thành tích thừa số nguyên tố, ta thực b»ng dßng lƯnh: [>ifactor(n); Sau dÊu (;) Ên phÝm “Enter” hình kết phân tích n thừa số nguyên tố Nếu n hợp số có dạng n=q1q2 qk, qj số nguyên tố khác thực tiếp bớc kiểm tra thứ Nếu không khẳng định n số Carmichael Bớc 2: Thùc hiƯn c¸c phÐp tÝnh chia (n-1):(qj-1), ta thùc hiƯn b»ng dßng lƯnh sau: [>(n-1)/(qj-1); Sau dÊu (;) Ên phÝm Enter hình kết thơng cđa phÐp chia NÕu víi mäi j=1,2, , k c¸c thơng tìm đợc số nguyên ta khẳng định n số Carmichael, không trả lời Thí dụ 1: Số 6601 có phải sè Carmichael hay kh«ng? Thùc hiƯn kiĨm tra nh− sau: [>ifactor(6601); (7)(23)(41) 31 6601 đợc phân tích thành thừa số nguyên tố khác nhau, nghi ngờ số Carmichel Để kiểm tra xem có thực số Carmichel hay không, ta thực c¸c lƯnh sau: [>(6601-1)/(7-1); 1100 [>(6601-1)/(23-1); 300 [>(6601-1)/(41-1); 165 V V n nM M a at th h C C o om m VËy 6601 lµ sè Carmichael ThÝ dơ 2: Số có phải số Carmichael hay không? Thùc hiƯn kiĨm tra nh− sau: [>ifactor(6); (2)(3) [>(6-1)/(2-1); [>(6-1)/(3-1); Vậy số Carmichael Thí dụ 3: Số 45 có phải số Carmichael hay kh«ng? Thùc hiƯn kiĨm tra nh− sau: [>ifactor(45); (3)2(5) Số 45 không thoả mÃn bớc thứ Vậy 45 số Carmichael II Thực hành kiểm tra số giả nguyên tố Cho hai số nguyên dơng n, b Để kiểm tra xem n có phải số giả nguyên tố sở b hay không ta thực bớc nh sau: Bớc 1: Kiểm tra n hợp số, ta thực dòng lÖnh: [>isprime(n); 32 Sau dÊu (;) Ên phÝm “Enter” NÕu hình chữ true n số nguyên tố, hình chữ false n hợp số Nếu n số nguyên tố n số giả nguyên tố sở b Nếu ngợc lại thực tiếp b−íc B−íc 2: KiĨm tra ®ång d− thøc bn-b ≡ 0(mod n), thùc hiƯn b»ng dßng lƯnh: [>b&^n-b mod n; Sau dấu (;) ấn phím Enter hình kết Nếu số n số giả nguyên tố sở b Thí dụ1: Số 561 có phải số giả nguyên tố sở hay không? Ta thực lÖnh sau: V V n nM M a at th h C C o om m [>isprime(561); false [>2&^561-2 mod 561; Vậy 561 số giả nguyên tố sở Thí dụ 2: Số 12241913785205210313897506033112067347143 có phải số giả nguyên tố sở hay không? Ta thực lệnh sau: [>ispime(12241913785205210313897506033112067347143); true Số 12241913785205210313897506033112067347143 số nguyên tố Do 12241913785205210313897506033112067347143 số giả nguyên tố sở Thí dụ 3: Số 326 có phải số giả nguyên tố sở hay không? Ta thực lệnh sau: [>isprime(326); false [>3&^326-3 mod 326; Vậy 326 là số giả nguyên tố sở II Thực hành kiểm tra số số giả nguyên tố mạnh Cho n số nguyên dơng lẻ, b số nguyên dơng Để kiểm tra n có phải số giả nguyên tố mạnh sở b hay không ta thực theo bớc sau: Bớc 1: Kiểm tra n hợp số, ta thực b»ng dßng lƯnh: 33 [>isprime(n); Sau dÊu (;) Ên phÝm Enter Nếu hình chữ true n số nguyên tố, hình chữ false n hợp số Nếu n số nguyên tố n số giả nguyên tố mạnh sở b Nếu ngợc lại thùc hiƯn tiÕp b−íc B−íc 2: Ph©n tÝch n-1 thừa số nguyên tố, ta thực dòng lệnh: [>ifactor(n-1); Sau dấu (;) ấn phím Enter hình phân tích n-1 ta thu đợc kết có dạng n-1=2st, s số nguyên dơng, t số nguyên dơng lỴ V V n nM M a at th h C C o om m B−íc 3: KiĨm tra ®ång d− thøc bt-1 ≡ 0(mod n) Vµo lƯnh [>b&^t-1 mod n; Sau dấu (;) ấn phím Enter hình kết Nếu số n số giả nguyên tố mạnh sở b, kết số khác ta thùc hiƯn tiÕp b−íc B−íc 4: KiĨm tra c¸c ®ång d− thøc dßng lƯnh: j (b t + 1) ≡ 0(mod n) víi j=0, s-1, ta thùc hiƯn [>seq (b&^((2^j)t)+1 mod n, j=0 s-1); Sau dÊu (;) Ên phím Enter hình dÃy kết Nếu dÃy kết có số số n số giả nguyên tố mạnh sở b Thí dụ: Số 2047 có phải số giả nguyên tố mạnh sở hay không? Thùc hiƯn kiĨm tra nh− sau: [>isprime(2047); false Do ®ã n hợp số Tiếp tục thực lệnh [>ifactor(n-1); (2)(3)(11)(31) TiÕp tơc thùc hiƯn lƯnh [>2&^(3*11*31)-1 mod 2047; Vậy 2047 số giả nguyên tố mạnh sở II Thùc hµnh biĨu diƠn mét sè d−íi dạng phân số liên tục Biểu diễn số n dới dạng phân số liên tục theo cách thông thờng với số thơng biểu diễn k, ta dùng lƯnh: [>cfrac(n,k); 34 Sau dÊu (;) Ên phÝm “Enter” trªn hình xuất kết Thí dụ: Biểu diễn dới dạng phân số liên tục theo cách thông thờng với thơng Ta thực lệnh: [> cfrac (Pi,6); 3+ 7+ 15 + V V n nM M a at th h C C o om m 1+ 292 + 1+ 1+ Biểu diễn số n dới dạng phân số liên tục theo cách đơn giản với số chữ sè biĨu diƠn lµ k, ta dïng lƯnh: [>cfrac(n,k,’quotients’); Sau dấu (;) ấn phím Enter hình xt hiƯn kÕt qu¶ ThÝ dơ: BiĨu diƠn π d−íi dạng phân số liên tục theo cách viết đơn giản víi 100 ch÷ sè biĨu diƠn Ta thùc hiƯn lƯnh: [> cfrac (Pi,100,’quotients’); [3,7,15,1,292,1,1,1,2,1,3,1,14,2,1,1,2,2,2,2,1,84,2,1,1, 15,3,13,1,4,2,6,6,99,1,2,2,6,3,5,1,1,6,8,1,7,1,2,3,7,1, 2,1,1,12,1,1,1,3,1,1,8,1,1,2,1,6,1,1,5,2,2,3,1,2,4,4,16, 1,161,45,1,22,1,2,2,1,4,1,2,24,1,2,1,3,1,2,1,1,10,2, ] BiÓu diễn số n dới dạng phân số liên tục theo chu kỳ tuần hoàn, ta dùng lệnh: [>cfrac(n,periodic); Sau dấu (;) ấn phím Enter hình xuất kết Thí dụ: Biểu diễn 31/2 dới dạng phân số liên tục theo chu kỳ tuần hoàn Ta thực hiÖn lÖnh: [>cfrac (3^(1/2),'periodic'); 1+ 1+ 2+ 1+ + 35 BiĨu diƠn sè n dới dạng phân số liên tục theo chu kỳ tuần hoàn đơn giản, ta dùng lệnh: [>cfrac (n,'periodic','quotients'); Sau dấu (;) ấn phím Enter hình xuất kết Thí dụ: Biểu diễn 31/2 dới dạng phân số liên tục theo chu kỳ tuần hoàn đơn gi¶n Ta thùc hiƯn lƯnh: [> cfrac (3^(1/2),'periodic','quotients'); [[1], [1, 2]] V V n nM M a at th h C C o om m II Thực hành tìm phân số hội tụ thứ k số Để thực hành tìm phân số hội tụ thứ k mét sè n, ta thùc hiƯn theo c¸c lƯnh sau: Buớc 1: Biểu diễn n dới dạng phân số liên tôc [> cf:= cfrac(n); Sau dÊu (;) Ên phÝm “Enter” hình xuất biểu diễn Bớc 2: TÝnh ph©n sè héi tơ thø k [> nthconver(cf,k); Sau dấu (;) ấn phím Enter hình xuất kết Trong trình thực ta không cần biết kết thị bớc 1, ®ã cã thĨ thay dÊu (;) b»ng dÊu (:) dòng lệnh ([>cf:=cfrac(n):) Khi hình dấu nhắc ([>) để thực hiƯn tiÕp lƯnh thø ThÝ dơ: TÝnh ph©n sè héi tơ thø cđa e Ta thùc hiƯn nh− sau: [> cf:= cfrac(exp(1)); cf : = + 1+ 2+ 1+ 1+ 4+ 1+ 1+ 6+ [> nthconver(cf,5); 36 1+ 87 32 Nh− vËy, ph©n sè héi tơ thø cđa e lµ 87 32 II Thùc hành đổi số Để thực hành đổi sè n tõ c¬ 10 sang c¬ sè b ta dïng dßng lƯnh sau: [>convert(n,base,b); V V n nM M a at th h C C o om m Sau dấu (;) ấn phím Enter hình lên dòng kết Chú ý kết đa hình đợc viết theo thứ tự ngợc lại Thí dụ 1: Đổi số 24564 từ số 10 sang số Ta thực hành nh sau: [>convert(24564,base,6); [0, 2, 4, 5, 0, 3] VËy ta đợc số (305420)6 Chú ý: Trong trờng hợp số b >10, ta thực dòng lệnh đổi số nh bình thờng Tuy nhiên, sau nhận đợc kết quả, để tránh nhầm lẫn ta thực việc đặt tơng ứng số lớn 10 với kí hiệu Ta xem ví dụ sau: Thí dụ 2: Đổi số 45676 từ số 10 sang số 15, đặt 10=A, 11=B,12=C,13=D,14=E Ta thùc hµnh nh− sau: [>L:=convert(45676,base,6): [>subs(10=A,11=B,12=C,13=D,14=E,L); [1, 0, 8, D] Vậy ta đợc số (D801)15 Để thực hành ®ỉi mét sè n tõ c¬ sè a sang c¬ sè b ta dïng dßng lƯnh sau: [> convert(n,base,a,b); Sau dấu (;) ấn phím Enter hình lên dòng kết Chú ý kết đa hình đợc viết theo thứ tự ngợc lại Thí dụ: Đổi số 305420 số sang số 10 Ta thực dòng lệnh 37 [> convert([0,2,4,5,0,3],base,6,10); [4, 6, 5, 4, 2] V V n nM M a at th h C C o om m Vậy ta có kết (24564)10 38 Chơng Các hàm số học Khi nghiên cứu số nguyên, ta thờng làm việc với đại lợng nh: số ớc số nguyên tố cho tr−íc, tỉng c¸c −íc cđa nã, tỉng c¸c l thõa bậc k ớc, Ngoài ví dụ có nhiều hàm số học quan trọng khác Trong chơng này, ta xét sơ qua vài hàm quan trọng Phần lớn chơng đợc giành cho hàm Euler, hàm số học quan träng nhÊt V V n nM M a at th h C C o om m Đ1 Định nghĩa Định nghĩa 3.1 Hàm số học tức hàm xác định tập hợp số nguyên dơng Định nghĩa 3.2 Một hàm số học f đợc gọi nhân tÝnh nÕu víi mäi n, m nguyªn tè cïng nhau, ta có f(mn)=f(m)f(n) Trong trờng hợp đẳng thức với m,n (không thiết nguyên tố nhau), hàm f đợc gọi nhân tính mạnh Những ví dụ đơn giản hàm nhân tính (mạnh) là: f(n)=n f(n)=1 Dễ chứng minh tính chất sau đây: f hàm nhân tính, n số nguyên dơng có khai triển thành thừa số nguyên tố dạng n=p1a1p2a2 pkak, f(n) đợc tính theo công thức f(n)=f(pa1)f(pa2) f(pak) Đ2 Phi hàm Euler Trong hàm số học, hàm Euler mà ta định nghĩa sau có vai trò quan trọng Định nghĩa 3.3 Phi- hàm Euler (n) hàm số học có giá trị n số số không vợt n nguyên tố với n Ví dụ Từ định nghÜa ta cã: φ (1)=1, φ (2)=1, φ (3)=2, φ (4)=2, φ (5)=4, φ (6)=2, φ (7)=6, φ (8)=4 , (9)=6, (10)=4 Từ định nghĩa ta có hệ trực tiếp: Số p nguyên tố (p)=p-1 Nếu định lí Fermat bé cho ta công cụ nghiên cứu đồng d modulo số nguyên tố, Phi-hàm Euler đợc dùng ®Ĩ xÐt ®ång d− modulo mét hỵp sè Tr−íc vào vấn đề đó, ta cần số định nghÜa sau 39 ... thừa số nguyên tố, toán khó khăn Trong phần sách, ta tìm hiểu nhiều thuật toán để làm việc đó, nh ứng dụng thực tiễn Đ3 Thuật toán Euclid Một thuật toán lâu đời toán học thuật toán Euclid Thuật toán. .. tạp thực thuật toán Cũng có thuật toán có độ phức tạp trung gian đa thức mũ Ta thờng gọi thuật toán dới mũ Chẳng hạn, thuật toán nhanh đợc biết để phân tích số nguyên n thừa số thuật toán có độ... tính đắn thuật toán Euclid, vừa cho ớc lợng độ phức tạp Định lí Lamé Số phép chia cần thiết để tìm ƯCLN hai số nguyên dơng thuật toán Euclid không vợt lần số chữ số thập phân số bé hai số đà cho