SKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tốSKKN Ứng dụng lý thuyết toán để giải các bài toán tin Phần 2 Số nguyên tố
M ỤC L ỤC NỘI DUNG TRANG MỤC LỤC I PHẦN ĐẶT VẤN ĐỀ I.1/ Lý chọn đề tài I.2/ Mục tiêu nghiên cứu I.3/ Nhiệm vụ nghiên cứu I.4/ Đối tượng nghiên cứu I.5/ Các phương pháp nghiên cứu II PHẦN NỘI DUNG II.1/ Lịch sử vấn đề nghiên cứu II.2/ Cơ sở lý luận đề tài II.3/ Thực trạng vấn đề nghiên cứu II.4/ Nội dung nghiên cứu kết nghiên cứu A/ NỘI DUNG NGHIÊN CỨU A.1) Số nguyên tố A.2) Các tập áp dụng 11 A.3) Một số tập đề nghị 17 A.4) Kết luận 18 B/ KẾT QUẢ NGHIÊN CỨU 18 III PHẦN KẾT LUẬN 19 III.1/ Kết luận 19 III.2/ Tài liệu tham khảo 19 I PHẦN ĐẶT VẤN ĐỀ I.1/ Lý chọn đề tài Để tiếp tục hoàn chỉnh chuyên đề bồi dưỡng HSG chuyên Tin “ỨNG DỤNG LÝ THUYẾT TỐN ĐỂ GIẢI CÁC BÀI TỐN TIN”; qua q trình nghiên cứu, giảng dạy, tham khảo ý kiến đồng nghiệp, tơi thấy đa số tốn tin học số thường đề cập nhiều đến số nguyên tố, xử lí số ngun tố Chính tiếp tục chọn viết tiếp đề tài chuyên đề “ỨNG DỤNG LÝ THUYẾT TOÁN ĐỂ GIẢI CÁC BÀI TOÁN TIN” (Phần 2: Số nguyên tố) I.2/ Mục tiêu nghiên cứu Như biết, tốn học có ảnh hưởng lớn đến lĩnh vực sống Các tốn tin có thuật tốn dựa sở lý thuyết toán học vững đem lại kết tốt nhiều so với thuật tốn khác Giúp em học sinh có kiến thức tốt, tư tốt lập trình; số nguyên tố xử lí số nguyên tố vấn đề số mà người lập trình tin học cần phải xử lý I.3/ Nhiệm vụ nghiên cứu Trước hết thực đổi phương pháp giảng dạy Tin học làm cho học sinh sáng tạo tìm kết quả, lời giải hay “dạng tốn tin có sử dụng toán học”; giúp thân nắm vững lập trình, tư thuật tốn, số ngun tố, xử lí số nguyên tố, đồng thời trao đổi học tập kinh nghiệm Quý Thầy Cô Tổ Tin học I.4/ Đối tượng nghiên cứu Trong nghiên cứu này, học sinh chọn em học lớp chuyên Tin học khối 10, 11, 12 thuộc trường THPT Chuyên Tiền Giang số giáo viên đứng lớp dạy tin học trường THPT I.5/ Các phương pháp nghiên cứu * Phương pháp suy luận, tổng hợp: kết hợp từ nhiều nguồn tài liệu tham khảo tác giả tra cứu mạng internet với đề thi Học sinh Giỏi rút kinh nghiệm, hệ thống lại kiến thức, mở hướng * Phương pháp trò chuyện – vấn: trao đổi tâm tình với nhiều học sinh giỏi để nắm tình hình việc giải toán tin số * Phương pháp khảo sát: thân tham gia giảng dạy lớp, đội tuyển HSG, kỳ tập huấn, đề; tham khảo đồng nghiệp, quý Thầy Cô giảng dạy đội tuyển nhiều năm nên có nắm tình hình sử dụng phương pháp làm em học sinh * Phương pháp phân tích lý luận: phân tích giúp học sinh nắm thật rõ chất vấn đề, lựa chọn phương pháp giải cho phù hợp II PHẦN NỘI DUNG II.1/ Lịch sử vấn đề nghiên cứu Trong năm liên tiếp dạy bồi dưỡng HSG lớp 10, 11, 12 đội tuyển thi HSG cấp Tỉnh, cấp Quốc Gia môn Tin học thân tham dự lớp “BỒI DƯỠNG TẬP HUẤN GIẢNG DẠY CHUYÊN ĐỀ MÔN CHUYÊN TIN HỌC THPT” nhiều năm Bộ GD&ĐT tổ chức Tôi nhận thấy kiến thức Tin học nâng lên rõ rệt Các giảng Thầy NGUYỄN THANH TÙNG, Thầy ĐỖ ĐỨC ĐƠNG, Thầy LÊ MINH HỒNG, tham khảo ý kiến đồng nghiệp chuyên dạy bồi dưỡng đội tuyển Tỉnh bạn, trường THPT Chuyên, tơi rút điều “KIẾN THỨC TỐN HỌC RẤT QUAN TRỌNG DẠY LẬP TRÌNH TRONG TIN HỌC” Được động viên khuyến khích q Thầy Cơ tổ, thầy LÊ NGỌC LINH, mạnh dạng tiếp tục chọn viết phần hai cho đề tài “Số nguyên tố”; II.2/ Cơ sở lý luận đề tài Kết hợp giảng tài liệu tham khảo để phân tích, tổng hợp, hệ thống II.3/ Thực trạng vấn đề nghiên cứu Đa số học sinh chuyên tin ngại, sợ giải tốn tin số có ứng dụng tốn; lúng túng q trình phân tích, tổ chức liệu, thuật tốn để tìm chất vận dụng kiến thức cách thích hợp II.4/ Nội dung nghiên cứu kết nghiên cứu A/ NỘI DUNG NGHIÊN CỨU A.1) Số nguyên tố A.1.1) Kiến thức toán học A.1.1.1) Định nghĩa số nguyên tố Một số nguyên p (p > 1) số nguyên tố p có hai ước số p Một số nguyên lớn mà không số nguyên tố gọi hợp số Ví dụ: số nguyên tố là: 2, 3, 5, 7, 11, 13, 17,… A.1.1.2) Các định lí số nguyên tố Bổ đề 1: Mọi số nguyên lớn chia hết cho số nguyên tố Chứng minh bổ đề 1: Ta dể dàng chứng minh phương pháp quy nạp Bổ đề 2: Mọi hợp số có ước thực nhỏ bậc hai (ước thực ước khác khác nó) Chứng minh bổ đề 2: Vì n hợp số nên ta có: n = a.b với < a, b < n Nếu đồng thời a, b > n n = n n < a.b = n (mâu thuẩn) Vậy có hai số a, b phải nhỏ n Nhận xét: từ bổ đề ta có nhận xét sau: Mỗi hợp số phải có ước nguyên tố nhỏ bậc hai Định lý (Định lý Fecma nhỏ): Nếu p số nguyên tố a số tự nhiên ap mod p = a Từ lý thuyết tốn sở trên, ta ứng dụng chúng vào giải thuật kiểm tra số nguyên tố tin học A.1.2) Giải thuật kiểm tra số nguyên tố tin học: Bài toán: Kiểm tra số nguyên dương n có phải số nguyên tố không? Ý tưởng: Nếu n > không chia hết cho số nguyên tất số k chạy từ đến n n số nguyên tố Câu hỏi học sinh hỏi thầy cô là: “Tại xét k chạy từ đến n ”? Thật vậy, theo bổ đề 2, n (n > 1) số nguyên tố, ta có: n = k1k2 mà k1 k2 n Vì k12 k1k1 k1k2 n nên k1 n Giải thuật 1: (Pascal) Function is_prime(n: longint): boolean; Var k: longint; Begin if n = then exit (false); for k := to trunc(sqrt(n)) if (n mod k = 0) then exit (false); exit (true); End; Nhận xét: Hàm is_prime(n) tiến hành kiểm tra số k đoạn [2, n ] Để cải tiến, ta giảm số lần kiểm tra, ta kiểm tra xem có tồn số nguyên tố k (2 k n ) mà k ước n n khơng phải số ngun tố, ngược lại n nguyên tố Thay kiểm tra k số nguyên tố đoạn [2, n ] ta kiểm tra số k có tính chất giống với tính chất số nguyên tố đoạn [2, n ]: Tc1 Trừ số số nguyên tố số lẻ Tc2 Trừ số 3, số ngun tố có dạng 6k (vì số dạng 6k 2;6k chia hết cho 2;3) Giải thuật 2: (Pascal) Function is_prime2(n: longint): boolean; Var k, sqrt_n: longint; Begin if (n = 2) or (n = 3) then exit (true); if (n = 1) or (n mod = 0) or (n mod = 0) then exit (false); sqrt_n := trunc(sqrt(n)); k := -1; repeat inc(k,6); if (n mod k = 0) or (n mod (k+2) = 0) then break; until k > sqrt_n; exit (k > sqrt_n)); End; Nhận xét: Với hai giải thuật trên, ta chạy chương trình với n = 106, n lớn (khoảng 107 trở đi) chương trình chạy chậm Muốn kiểm tra số nguyên lớn có nguyên tố, người ta chuyển sang hướng kiểm tra xác suất Có nhiều thuật tốn xây dựng theo hướng này: dựa vào định lý Fermat nhỏ có kiểm tra Fermat kiểm tra Miller-Rabin tiêu biểu Giải thuật 3: Kiểm tra nguyên tố dùng định lý Fecmat nhỏ Ý tưởng: Lặp k lần { Chọn giá trị ngẫu nhiên a, ≤ a ≤ p-1 Nếu ap-1 (mod p) tăng biến đếm c (số lần thừa nhận p nguyên tố), ngược lại p hợp số } Nếu tỉ số c/k > xacsuat chấp nhận p nguyên tố (với xác suất sai nhỏ) Giải thuật: function is_prime3(p : int64): boolean; var test, dem, a : longint; begin if (p=2) or (p=3) then exit(true); if (p 0.6) then exit(true); end; exit(false); end; Trong giải thuật prime_3 trên, ta có sử dụng hàm luythua(x,y,n) Hàm luythua(x,y,n) viết sau: 2y y 2k x y x (mod n) (mod n) 2y y 2k x x function luythua(x,y,n: int64): int64; var z1 : longint; begin if y=0 then exit(1) else begin z := luythua(x, y div 2, n); z1 := ((z mod n)*(z mod n)) mod n; if (y mod = 1) then z1:= ((x mod n)*(z1 mod n)) mod n; if z1 > n then z1:= z1 mod n; exit(z1); end; end; Giải thuật 4: Kiểm tra nguyên tố Miller-Rabin Mệnh đề Miller-Rabin: Ý tưởng: { Phân tích số lẻ n: n-1=d.2s (d lẻ) Lặp: ntest lần { Chọn a thuộc{2, ,n-1}; Tính x = ad (mod n); Nếu (x=1) or (x=n-1) đầu lặp; k=1; Lặp: Trong kn then z := z mod n; exit(z); end; function prime(n : int64): boolean; var dem, r, a, x : int64; k: longint; begin if n=2 then exit(true); if (n