Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 45 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
45
Dung lượng
286 KB
Nội dung
PHẦN I ĐẶT VẤN ĐỀ Lý chọn đề tài Trong trình đào tạo bồi dưỡng học sinh giỏi trường phổ thông, nhận thấy khả số học số nguyên lớn ngôn ngữ lập trình Free Pascal biểu diễn số ngun có hàng chục nghìn chữ số đến hàng trăm nghìn chữ số gây nhiều khó khăn cho học sinh Nhằm khắc phục nhược điểm để đáp ứng yêu cầu công tác bồi dưỡng học sinh giỏi thầy trò trường trung học phổ thông Vinh Xuân, mạnh dạn nghiên cứu đề tài “KĨ THUẬT LẬP TRÌNH ĐỐI VỚI SỐ NGUYÊN LỚN TRONG CÔNG TÁC BỒI DƯỠNG HỌC SINH GIỎI TẠI TRƯỜNG TRUNG HỌC PHỔ THƠNG VINH XN” nhằm phục vụ cơng tác bồi dưỡng học sinh giỏi có hiệu Mục đích nghiên cứu - Hệ thống hóa sở lý thuyết lập trình số nguyên lớn - Xây dựng cơng cụ lập trình số nguyên lớn nhằm hỗ trợ cho hoạt động dạy học thầy trò nhà trường trình tiếp xúc làm việc với số nguyên lớn - Trên sở nghiên cứu, từ đưa nhận xét, đánh giá đề xuất giải pháp góp phần hồn thiện cơng tác dạy học lập trình tốn mà liệu vào hay kết có giá trị nguyên dương lớn Đối tượng nghiên cứu Kỹ thuật lập trình số ngun lớn cơng tác dạy học bồi dưỡng thầy trò trường THPT Vinh Xuân Phạm vi nghiên cứu Tập hợp số nguyên dương lớn hệ thống tập có liệu vào hay kết kiểu số nguyên dương có giá trị lớn Phương pháp nghiên cứu - Phương pháp nghiên cứu sở lý luận - Phương pháp thu thập tài liệu - Phương pháp xử lý số liệu lập trình - Phương pháp thực nghiệm - Phương pháp điều tra phát vấn Kết cấu đề tài Phần I Đặt vấn đề Phần II Nội dung kết nghiên cứu Chương Cơ sở lý luận lập trình số nguyên lớn Chương Giải pháp cho số toán số nguyên lớn Phần III Kết luận PHẦN II NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU Chương CƠ SỞ LÝ LUẬN VỀ LẬP TRÌNH VỀ SỐ NGUYÊN LỚN 1.1 TỔ CHỨC KIỂU DỮ LIỆU MẢNG MỘT CHIỀU BIỂU DIỄN SỐ NGUYÊN LỚN Trong thực tế có tốn số học có giá trị lớn từ hàng chục nghìn đến hàng trăm nghìn chữ số, khả biểu diễn lưu trữ kiểu liệu chuẩn Free Pascal hữu hạn nên đáp ứng tốn số học có giá trị lớn Từ chúng tơi xây dựng mảng chiều có 1.000.001 phần tử, phần tử biểu diễn hay số chữ số số nguyên lớn Trong phần lý thuyết, khai báo mảng chiều phần tử biểu diễn chữ số số nguyên lớn, khai báo sau: Const Hang_so = 1000000; Type Big_Number = Array[0 Hang_so] of Longint; Var A: Big_Number; đó: + Chữ số hàng đơn vị số nguyên lớn biểu diễn phần tử A[1.000.000] + Chữ số hàng chục số nguyên lớn biểu diễn phần tử A[999.999] + ……… + Chữ số hàng cao số nguyên lớn biểu diễn phần tử A[i] giá trị i quản lý giá trị phần tử A[0] Với số nguyên lớn A = 876328 biểu diễn phần tử mảng quản lý giá trị A[0] sau: A 999.995 0 0 8 …… 999.995 999.996 999.997 999.998 999.999 1.000.000 Với A := viết: Fillchar(A, Sizeof(A),0); A[0]:= Hang_So; Với A := viết: Fillchar(A,Sizeof(A),0); A[0]:= Hang_So; A[Hang_so]:=1; Trên sở biểu diễn số nguyên lớn vậy, xây dựng phép toán tập hợp số nguyên dương lớn phép toán quan hệ, phép toán cộng, phép trừ, phép nhân, phép chia lấy phần nguyên (Div), phép chia lấy phần dư (Mod) ứng dụng phép tốn để giải số tốn cơng tác bồi dưỡng học sinh giỏi 1.2 PHÉP TỐN QUAN HỆ 1.2.1 Phép toán so sánh * Thuật toán: Hai số nguyên dương lớn A B kiểu Big_number biểu diễn mảng chiều, phần tử mảng biểu diễn chữ số số nguyên lớn Ta dựa vào giá trị A0, B0, Ai với A0 ≤ i ≤ Hang_so Bk với B0 ≤ k ≤ Hang_so để thực so sánh trả giá trị True False Function Bằng(A,B:Big_number): Boolean Begin Nếu A0 B0 Bằng:=false Ngược lại { + i:= A0; Trong (i ≤ Hang_so) (Ai = Bi) làm i:= i+1; + Bằng:= i > Hang_so;} End; * Chương trình Function Bang(A,B:Big_Number):Boolean; Var I:Longint; Begin If A[0]B[0] Then Bang:=False Else Begin I:=A[0]; While (IHang_So; End; End; 1.2.2 Phép toán so sánh lớn * Thuật toán: So sánh hai số A, B: Big_Number; A lớn B trả kết True khơng trả giá trị False Function Lớn_hơn(A,B:Big_number):Boolean Begin Nếu A0 < B0 Lớn_hơn:= true Ngược lại Nếu A0 > B0 Lớn_hơn:= false Ngược lại { + i:= A0; + Trong (i Hang_so Lớn_hơn:= False ngược lại i:= Ai > Bi} End; * Chương trình Function Lon_Hon(A,B:Big_Number):Boolean; Var I:Longint; Begin If A[0]B[0] Then Lon_Hon:=False Else Begin I:=A[0]; While (IHang_So Then Lon_Hon:=False Else Lon_Hon:=A[I]>B[I]; End; End; 1.2.3 Phép toán so sánh nhỏ * Thuật toán: So sánh hai số A, B: Big_Number; A nhỏ B trả kết True khơng trả giá trị False Function Nhỏ_hơn(A,B:Big_number):Boolean Begin * Nếu A0 < B0 Lớn_hơn:= False Ngược lại - Nếu A0 > B0 Lớn_hơn:= True Ngược lại { + i:= A0; + Trong (i Hang_so Lớn_hơn:= False ngược lại i:= Ai0 Do Begin I:=I-1;C[I]:=K Mod 10;K:=K Div 10; End; C[0]:=I; End; 1.3.1.2 Cộng hai số nguyên lớn * Thuật toán: Phép cộng hai số nguyên dương lớn thực từ phải sang trái phần nhớ mang sang trái chữ số Procedure Cong_Max(Var C:Big_Number;A,B:Big_Number); Begin Fillchar(C,sizeof(C),0); Tg:= 0; Cho i:= Hang_so Min(A0, B0) làm {Tg:= Tg + Ai + Bi; Ci:= Tg Mod 10; Tg:= Tg Div 10} Nếu Tg = C0:= i Ngược lại {C0:= i -1; Ci-1:= Tg} End; * Chương trình Procedure Cong_Max(Var C:Big_Number;A,B:Big_Number); Var I,Min,Tg:Longint; Begin Fillchar(C,Sizeof(C),0); Tg:=0; If A[0]>=B[0] Then Min:=B[0] Else Min:=A[0]; For I:=Hang_So Downto Min Do Begin Tg:=Tg+A[I]+B[I]; C[I]:=Tg Mod 10; Tg:=Tg Div 10; End; If Tg=0 Then C[0]:= i Else Begin C[0]:= i - 1; C[i -1]:=Tg; End; End; 1.3.2 Phép trừ 1.3.2.1 Trừ số nguyên lớn với số nguyên nhỏ * Thuật toán: Nếu A ≥ k C:= A – k khơng C:= – (k – A) Procedure Tru_Min(Var C:Big_Number; A:Big_Number; K:Longint); Begin Trường hợp A≥ k: C:= A – k Fillchar(c,sizeof(C),0); Tg:= Trong (k>0) (i≥ A0) làm {+ Tg:= k Mod 10; k := k Div 10; + Nếu Ai ≥ Tg Ci:= Ai – Tg Ngược lại {Ci:= Ai +10 – Tg; k:= k+1;} + I:= i + 1} Trong I ≥ A0 làm {Ci:=Ai; i:= i – 1} i:=A0; Trong (i0) And (I>=A[0]) Do Begin Tg:=K Mod 10; K:=K Div 10; If A[I]>=Tg Then C[I]:=A[I]-Tg Else Begin C[I]:=A[I]+10-Tg; K:=K+1; End; I:=I-1; End; If K=0 Then Begin While I>=A[0] Do Begin C[I]:=A[I]; I:=I-1; End; I:=A[0]; While (I=A[0] Do Begin M:=M-A[I]*Lt; Lt:=Lt*10; I:=I-1; End; Fillchar(C,Sizeof(C),0); I:=Hang_So; While M>0 Do Begin C[I]:=M Mod 10; M:=M Div 10; I:=I-1; End; C[0]:=I+1; C[C[0]]:=-C[C[0]]; End; End; 1.3.2.2 Trừ hai số nguyên lớn * Thuật toán: Thực trừ chữ số từ trái sang phải giá trị vay mượn hàng cao nhớ biến Tg làm sở cho phép trừ hàng cao hơn; xét hai trường hợp A ≥ B A < B: Nếu A ≥ B C:= A – B khơng C:= – (B – A) Procedure Tru_Min(Var C: Big_Number; A,B: Big_Number); Begin Fillchar(C,sizeof(C),0); Ok:= A ≥ B; Nếu Ok { Tg:= 0; Cho i:= Hang_so A0 làm Nếu Ai ≥ Tg + Bi {Ci:= Ai – Bi – Tg; Tg:= 0;} Ngược lại {Ci:= Ai + 10 – Bi – Tg; Tg:= 1;} Trong (i< Hang_so) (Ci = 0) làm i:= i+1; C0:= i;} Ngược lại { Tg:= 0; Cho i:= Hang_so B0 làm Nếu Bi ≥ Tg + Ai {Ci:= Bi – Ai – Tg; Tg:= 0;} Ngược lại {Ci:= Bi + 10 – Ci – Tg; Tg:= 1;} Trong (i< Hang_so) (Ci = 0) làm i:= i+1; C0:= i; Ci:= – Ci} End; * Chương trình Procedure Tru_Max(Var C:Big_Number;A,B:Big_Number); Var I,Tg:Longint; Ok:Boolean; Begin Fillchar(C,Sizeof(C),0); If A[0]B[0] Then Ok:=False Else Begin I:=A[0];While (IHang_So Then Ok:=False Else Ok:=A[I]>B[I]; End; If Ok Then Begin Tg:=0; For I:=Hang_So Downto A[0] Do If A[I]>=B[I]+Tg Then Begin C[I]:=A[I]-B[I]-Tg; Tg:=0 End Else Begin C[I]:=A[I]+10 - B[I] - Tg; Tg:=1; End; While (I0 Do Begin I:=I-1; C[I]:=Tg Mod 10000; Tg:=Tg Div 10000; End; C[0]:=I; End; {========================} Begin Assign(F1,'E:\Chuyen De\Dvi Giai Thua\Dulieu.Inp');Reset(F1); 32 Assign(F2,'E:\Chuyen De\Dvi Giai Thua\Ketqua.Out');Rewrite(F2); While Not Eof(F1) Do Begin Readln(F1,M); A[0]:=Hang_So;A[Hang_So]:=1; For I:=1 To M Do Nhan_Min(A,A,I); J:=Hang_So; While (J>=A[0])And(A[J]=0)Do J:=J-1; While A[J] Mod 10 = Do A[J]:=A[J] Div 10; Writeln(F2,M:10,A[J] Mod 10:5); End; Close(F1); Close(F2); End NHẬN XÉT: Chương trình hiệu với giá trị A i ≤ 5.104 Ai>5.104 thời gian thực tương đối lâu Để thực toán hiệu mạnh dạn đưa phương án sử dụng tính chất số học để giải tốn hiệu nhiều so với ban đầu phạm vi liệu mở rộng đến 108 Tính chất: + Hàng đơn vị tích tích hàng đơn vị thừa số + Nếu tách hết tất thừa số thừa số khỏi tích 1.2.3.4.5… N tích thừa số cịn lại có hàng đơn vị số lẻ + Hàng đơn vị N! luôn số chẵn với N > * Giải thuật: Xây dựng hàm xác định giá trị chữ số cuối N! khác không sau: Function Dvi(N:longint): Longint Begin Nếu N 1) And (I Mod = 0) Do Begin Cso_5:= Cso_5 + 1; I:= I Div 5; End; Dvi_Gthua:= (Dvi_Gthua * (I Mod 10)) Mod 10; End; For J:= To Cso_2 - Cso_5 Do Dvi_Gthua:= (Dvi_Gthua * 2) Mod 10; Dvi:=Dvi_Gthua; End; 34 End; Begin Assign(F1,'E:\Chuyen De\Dvi Giai Thua\Dulieu.Inp');Reset(F1); Assign(F2,'E:\Chuyen De\Dvi Giai Thua\Ketqua.out');Rewrite(F2); While Not Eof(F1) Do Begin Readln(F1,M); Writeln(F2, M:10, Dvi(M):5); End; Close(F1); Close(F2); End 2.5 ĐẾM SỐ ƯỚC Đề bài: Cho dãy số A1, A2, ……, AN số nguyên dương Ai ≤ 105 Hãy đếm xem giá trị Ai! có ước số với ≤ i ≤ N * Dữ liệu vào: lưu file văn DU LIEU.INP có cấu trúc sau: + Dịng đầu tiên: có số giá trị số nguyên dương N + Dòng thứ 2: gồm N số nguyên dương Ai với ≤ i ≤ N * Dữ liệu ra: file văn với tên KET QUA.OUT có nhiều dịng Đầu giá trị Ai! có nhiều dịng tùy thuộc vào giá trị số ước lưu theo cấu trúc sau: 100! co so uoc la: 39001250856960000 (Không biểu diễn kết dạng dấu phẩy động) Ví dụ: DU LIEU.INP KET QUA.OUT 2! co so uoc la: 2 50 100 500 5! co so uoc la: 16 50! co so uoc la: 4464046080 100! co so uoc la: 39001250856960000 500! co so uoc la: 303234214864803135635216296618578056852499175 8336000000000000 Cấu trúc liệu giải thuật * Cấu trúc liệu: - Biến N nguyên dương: lưu giá trị số phần tử dãy A - Xây dựng mảng A[1 N] lưu giá trị dãy số 35 - Xây dựng mảng B[1 K] lưu số nguyên tố từ Max(A i) với ≤ i ≤ N - Xây dựng mảng C[1 K] với C i = j với j số chữ số nguyên tố B i tách từ Ai! - Xây dựng biến mảng D: Big_Number lưu giá trị số ước đếm từ Ai! * Giải thuật: - Sử dụng thủ tục nhân số nguyên lớn A với số nguyên nhỏ k: Nhan_Min(C,A,k) nghĩa C:= A * k - Thủ tục TÁCH(X:Longint; C: Big_Number): Tách biểu thức X! thành tích thừa số nguyên tố PROCEDURE TACH(X: LONGINT; Var C: Big_Number); BEGIN Fillchar(C,SIZEOF(C),0); FOR i:= TO X DO Tách i thành thừa số nguyên tố lưu vào mảng C END; - Chương trình chính: Cho i:=1 đến N làm + Write(F, A[I],'! Co So Uoc La: '); + TACH(A[I],C); + D:=1; + Cho J:= đến K làm Nếu C[J]>0 Thì Nhan_Min(D,D,C[J]+1); + Writeln(F,D); Chương trình lưu theo đường dẫn E:\Chuyen De\UocSo Program DEM_SO_UOC; Const Hang_So=1000000; Type Big_Number=Array[0 Hang_So] Of Longint; Var A, B, C, D: Big_Number; I, M, N, K, J: Longint; F: Text; {========================} Procedure Doc_File; Var I, J, Max, U: Longint; 36 Begin Assign(F,'E:\Chuyen De\Uocso\Dulieu.Inp'); Reset(F); Readln(F,N); Max:= 0; For I:=1 To N Do Begin Read(F, A[I]); If Max < A[I] Then Max:= A[I]; End; Close(F); {Xây dựng dãy số B có K phần tử số nguyên tố từ đến (Max(A i)} B[1]:=2; B[2]:=3; K:=2; For I:= To Max Do Begin J:= 1; While (B[J] Sqrt(I) Then Begin K:= K+1; B[K]:= I; End; End; End; {========================} Procedure Tach(X: Longint; Var C: Big_Number); Var I, U, J: Longint; Begin Fillchar(C,Sizeof(C),0); For I:= To X Do Begin U:= I; J:= 1; Repeat If U Mod B[J] = Then Begin C[J]:= C[J] + 1; U:= U Div B[J]; End Else J:= J + 1; Until U = 1; End; End; {===========================} Procedure Nhan_Min(Var C: Big_Number; A: Big_Number; K: Longint); 37 Var I, TG: Longint; Begin Tg:= 0; For I:= Hang_So Downto A[0] Do Begin Tg:= Tg + A[I] * K; C[I]:= Tg Mod 10; Tg:= Tg Div 10; End; While Tg > Do Begin I:= I - 1; C[I]:= Tg Mod 10; Tg:= Tg Div 10; End; C[0]:= I; End; {========================} Begin DOC_FILE; Assign(F,'E:\Chuyen De\Uocso\Ketqua.OUT'); Rewrite(F); For I:=1 To N Do BEGIN Write(F, A[I],'! Co So Uoc La: '); TACH(A[I],C); Fillchar(D,Sizeof(D),0); D[0]:= Hang_So; D[Hang_So]:= 1; For J:= To K Do If C[J]>0 Then Nhan_Min(D,D,C[J]+1); For J:= D[0] To Hang_So Do Write(F, D[J]);Writeln(F); END; Close(F); End 2.6 MỘT SỐ BÀI TOÁN ĐỀ XUẤT Bài TỔNG SỐ LỚN Cho dãy số A1, A2, , AN số nguyên dương (N ≤ 10 6; Ai ≤ 10100) ≤ K ≤ 1000 * Yêu cầu: Xác định K chữ số cuối tổng S = A1 + A2 + A3 + … + AN * Dữ liệu vào: lưu file văn SO LON.INP có cấu trúc sau: - Dịng thứ nhất: ghi số nguyên K - Các dòng tiếp theo: dòng ghi số nguyên Ai 38 * Kết ra: ghi file văn SO LON.OUT giá trị có K chữ số cuối tổng S Ví dụ: SO LON.INP SO LON.OUT 8734 423242344244234234 324234423422342323 5435344654895388583 8967867967969765835498209752 768687675897583748539845639856 80279764987499459478978697396873986 (Chương trình ghi đĩa với đường dẫn CHUYEN DE\SO LON) Bài LŨY THỪA Xác định K chữ số cuối X Y với X, Y số nguyên dương X ≤ 10 Y ≤ 106 K ≤ 100 * Dữ liệu vào: từ file văn LUY THUA.INP: - Dòng thứ nhất: số nguyên dương K - N dòng tiếp theo: dòng ghi hai số Ai Bi * Kết ra: ghi file văn LUY THUA.OUT gồm N dòng, dịng ghi số có K chữ số cuối AiBi (lưu ý: kết trả K chữ số giá trị lũy thừa không đủ K chữ số) LUY THUA.INP 15 LUY THUA.OUT 32 25 1024 10 1048576 20 1073741824 30 1099511627776 40 125899906842624 50 (Chương trình ghi đĩa với đường dẫn E:\CHUYEN DE\LUY THUA) Bài CẶP NGOẶC Đếm xem có cách xếp N cặp ngoặc () để tạo thành biểu thức có nghĩa 39 * Dữ liệu vào: từ file văn SO NGOAC.INP lưu số nguyên dương N ≤ 105 * Kết ra: ghi file văn SO NGOAC.OUT Có số số cách xếp N cặp ngoặc lưu nhiều dòng phụ thuộc vào kết Ví dụ 1: SO NGOAC.INP SO NGOAC.OUT Ví dụ 2: SO NGOAC.INP 300 SO NGOAC.OUT 44886359467174175586204278398174262590443 17124557922921128429295231699349103179965 51330498997589600726489482164006103817421 59631482110163353923065464630215156802680 6610883615856 (Chương trình ghi đĩa - đường dẫn E:\CHUYEN DE\CATALAN) Bài BỘI SỐ Với số nguyên dương X (X ≤ 106) Hãy xác định số nguyên dương Y bội số nhỏ X cho biểu diễn Y hệ đếm thập phân chứa chữ số * Dữ liệu vào: từ file văn BOISO.INP gồm nhiều dòng, dòng thứ i số nguyên dương Ai (Ai ≤ 109) * Kết ra: đưa vào file văn BOISO.OUT sau: dịng có số A i bội số nhỏ Ai Ví dụ: BOISO.INP BOISO.OUT 2 10 4 100 20 20 100 25 25 100 3000 3000 111000 99 99 111111111111111111 (Chương trình ghi đĩa theo đường dẫn E:\CHUYEN DE\BOI SO) Bài TỔNG ƯỚC SỐ 40 Cho dãy số A1, A2, ……, AN số nguyên dương A i ≤ 20000 Hãy đếm xem giá trị Ai! có ước số với ≤ i ≤ N * Dữ liệu vào: lưu file văn DU LIEU.INP có cấu trúc sau: + Dịng đầu tiên: có số giá trị số nguyên dương N + Dòng thứ 2: gồm N số nguyên dương Ai với ≤ i ≤ N * Dữ liệu ra: file văn với tên KET QUA.OUT có nhiều dòng Đầu giá trị A i! có nhiều dịng tùy thuộc vào giá trị tổng ước lưu theo cấu trúc sau: 8! 159120 (Không biểu diễn kết dạng dấu phẩy động) DU LIEU.INP KET QUA.OUT 5! 360 10 12 13 8! 159120 10! 15334088 12! 2217441408 13! 31044179712 (Chương trình ghi đĩa với đường dẫn CHUYEN DE\TONG UOC) 41 Phần III KẾT LUẬN Trong trình nghiên cứu ứng dụng đề tài vào trình giảng dạy bồi dưỡng học sinh giỏi hai năm qua trường trung học phổ thông Vinh Xuân, đề tài giúp thầy trị chúng tơi gặt hái số thành cơng định (chọn học sinh đội tuyển HSG môn Tin học trường tham gia hai kỳ thi HSG cấp tỉnh vào năm 2012 2013 Sở GDĐT tỉnh Thừa Thiên Huế tổ chức; đạt hai giải Nhì cấp Tỉnh hai kỳ thi trên) Qua q trình ứng dụng đề tài chúng tơi nhận thấy có số ưu nhược điểm sau: * Về ưu điểm: - Biểu diễn số ngun lớn có hàng trăm nghìn chữ số giúp cho miền giá trị số nguyên lớn miền giá trị kiểu số thực Free Pascal Real hay Extended - Giải toán liên quan đến số nguyên lớn biểu diễn giá trị xác đến hàng đơn vị mà không sử dụng đến dấu phẩy động - Xây dựng công cụ hỗ trợ hữu hiệu giúp cho trình bỗi dưỡng học sinh giỏi giáo viên trường trung học phổ thông Vinh Xuân đạt kết cao tài liệu hiệu giúp học sinh học lập trình gải tốn số ngun lớn tốt để tham gia kỳ thi cấp tỉnh đạt thành tích cao * Về nhược điểm: Thuật tốn để giải số toán chưa tối ưu, thời gin thực lâu gặp liệu vào lớn; chương trình tương đối dài phức tạp để giải toán nguyên dương lớn Giá trị trả phép toán đa số nằm mảng chiều nên chưa linh động trình ứng dụng để giải tốn khác * Hướng phát triển đề tài: Do số vấn đề khách quan nên đề tài giới hạn tập số ngun, gặp tình số nguyên âm kết trả giá trị đầu sai Vì chúng tơi mở rộng hoàn chỉnh đề tài năm Phú Vang, ngày 12 tháng năm 2014 Người viết chuyên đề Lê Văn Lộc 42 TÀI LIỆU THAM KHẢO Bộ Giáo dục Đào tạo (2008), Sách giáo khoa Tin học 11, NXB Giáo dục Bộ Giáo dục Đào tạo, Tài liệu giáo khoa chuyên Tin 1, NXB Giáo dục Bộ Giáo dục Đào tạo, Tài liệu giáo khoa chuyên Tin 2, NXB Giáo dục Bộ Giáo dục Đào tạo (2010), Tài liệu tập huấn phát triển chuyên môn giáo viên trường THPT chuyên môn Tin học, NXB Giáo dục Bộ Giáo dục Đào tạo (2011) Tài liệu tập huấn phát triển chuyên môn giáo viên trường THPT chuyên môn Tin học, NXB Giáo dục Bộ Giáo dục Đào tạo (2012) Tài liệu tập huấn phát triển chuyên môn giáo viên trường THPT chuyên môn Tin học, NXB Giáo dục Kenneth H.Rosen, Toán học rời rạc ứng dụng Tin học (sách dịch) TS Nguyễn Xuân My (), Tuyển chọn toán Tin học dành cho học sinh giỏi THPT, NXB Giáo dục Nguyễn Quang Vịnh (2007) Bài tập thực hành Pascal, NXB Giáo dục 43 MỤC LỤC PHẦN I ĐẶT VẤN ĐỀ 1 Lý chọn đề tài Mục đích nghiên cứu Đối tượng nghiên cứu Phạm vi nghiên cứu Phương pháp nghiên cứu Kết cấu đề tài PHẦN II NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU Chương CƠ SỞ LÝ LUẬN VỀ LẬP TRÌNH VỀ SỐ NGUYÊN LỚN 1.1 TỔ CHỨC KIỂU DỮ LIỆU MẢNG MỘT CHIỀU BIỂU DIỄN SỐ NGUYÊN LỚN .3 1.2 PHÉP TOÁN QUAN HỆ 1.2.1 Phép toán so sánh 1.2.2 Phép toán so sánh lớn 1.2.3 Phép toán so sánh nhỏ 1.3 PHÉP TOÁN SỐ HỌC 1.3.1 Phép cộng .6 1.3.1.1 Cộng số nguyên lớn với số nguyên nhỏ 1.3.1.2 Cộng hai số nguyên lớn 1.3.2 Phép trừ 1.3.2.1 Trừ số nguyên lớn với số nguyên nhỏ 1.3.2.2 Trừ hai số nguyên lớn .9 1.3.3 Phép nhân 11 1.3.3.1 Nhân số nguyên lớn với số nguyên nhỏ 11 1.3.3.2 Nhân hai số nguyên lớn 12 1.3.4 Phép chia 13 1.3.4.1 Chia lấy phần nguyên .13 1.3.4.1.1 Số nguyên lớn chia số nguyên nhỏ 13 1.3.4.1.2 Số nguyên lớn chia số nguyên lớn .13 1.3.4.2 Chia lấy phần dư (Mod) 17 1.3.4.2.1 Số nguyên lớn chia số nguyên nhỏ 17 1.3.4.2.2 Số nguyên lớn chia số nguyên lớn .17 Chương II GIẢI PHÁP CHO MỘT SỐ BÀI TOÁN SỐ NGUYÊN LỚN 20 2.1 TÍNH GIÁ TRỊ GIAI THỪA .20 2.2 BÀI TOÁN BIÊN DỊCH .22 2.3 BÀI TOÁN BỘI CHUNG NHỎ NHẤT .28 2.4 SỐ KHÁC KHÔNG CUỐI CÙNG .31 2.5 ĐẾM SỐ ƯỚC .35 2.6 MỘT SỐ BÀI TOÁN ĐỀ XUẤT 38 Phần III KẾT LUẬN 42 44 ... Cơ sở lý luận lập trình số nguyên lớn Chương Giải pháp cho số toán số nguyên lớn Phần III Kết luận PHẦN II NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU Chương CƠ SỞ LÝ LUẬN VỀ LẬP TRÌNH VỀ SỐ NGUYÊN LỚN 1.1... Số nguyên lớn chia số nguyên nhỏ 13 1.3.4.1.2 Số nguyên lớn chia số nguyên lớn .13 1.3.4.2 Chia lấy phần dư (Mod) 17 1.3.4.2.1 Số nguyên lớn chia số nguyên nhỏ... Nho_Hon:=A[I]