CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAMĐộc lập – Tự do- Hạnh phúc ĐỀ TÀI: ÁP DỤNG PHƯƠNG PHÁP DẠY HỌC THEO GÓC TRONG MÔN HÓA HỌC NHẰM PHÁT HUY TÍNH TÍCH CỰC HỌC TẬP CỦA HỌC SINH Họ và tên: N
Trang 1CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do- Hạnh phúc
ĐỀ TÀI:
ÁP DỤNG PHƯƠNG PHÁP DẠY HỌC THEO GÓC TRONG MÔN HÓA HỌC NHẰM PHÁT HUY TÍNH TÍCH CỰC HỌC TẬP CỦA HỌC SINH
Họ và tên: Nguyễn Thị Hoa Lý Chức vụ: Tổ trưởng chuyên môn Đơn vị công tác : Trường THPT Ninh Châu
Quảng Ninh, tháng 5 năm 2018
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do- Hạnh phúc
ĐỀ TÀI:
CHUYÊN ĐỀ VỀ SỐ NGUYÊN TỐ TRONG
BỒI DƯỠNG HỌC SINH GIỎI
Họ và tên: Dương Thùy Mai Chức vụ: Giáo viên
Đơn vị công tác : Trường THPT Ninh Châu
Quảng Ninh, tháng 1 năm 2019
Trang 2CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do- Hạnh phúc
ĐỀ TÀI:
ÁP DỤNG PHƯƠNG PHÁP DẠY HỌC THEO GÓC TRONG MÔN HÓA HỌC NHẰM PHÁT HUY TÍNH TÍCH CỰC HỌC TẬP CỦA HỌC SINH
Tháng 5 / 2018
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do- Hạnh phúc
ĐỀ TÀI:
CHUYÊN ĐỀ VỀ SỐ NGUYÊN TỐ TRONG
BỒI DƯỠNG HỌC SINH GIỎI
Tháng 1 / 2019
Trang 3MỤC LỤC
1 PHẦN MỞ ĐẦU 1
1.1 Lí do chọn đề tài 1
1.2 Điểm mới của đề tài 1
2 NỘI DUNG 2
2.1 Cơ sở lí luận 2
2.2 Thực trạng của vấn đề 2
2.3 Nội dung và giải pháp thực hiện 3
2.3.1 Bài toán gốc: “ Kiểm tra tính nguyên tố của một số nguyên dương ” 3
2.3.2 Các dạng bài toán về số nguyên tố 6
Bài toán 1: Liệt kê các số nguyên tố trong đoạn từ [2,N] 6
Bài toán 2: Số siêu nguyên tố 8
Bài toán 3: Dãy số đặc biệt 12
Bài toán 4: Dãy con tăng nguyên tố 14
Bài toán 5: Phân tích 1 số ra tích hoặc tổng các số nguyên tố 17
Bài toán 6: Phân tích thừa số nguyên tố 19
Bài toán 7: Số nguyên tố mersen 23
Bài toán 8: Dãy nguyên tố 26
3 PHẦN KẾT LUẬN 29
3.1 Ý nghĩa, phạm vi áp dụng của đề tài 29
3.2 Kiến nghị, đề xuất 29
TÀI LIỆU THAM KHẢO 30
Trang 41 PHẦN MỞ ĐẦU
1.1 Lí do chọn đề tài.
Trong chương trình tin học lớp 11, học sinh được tiếp cận với ngôn ngữ lậptrình Pascal, một loại ngôn ngữ thuộc nhóm ngôn ngữ lập trình bậc cao Đây làmột ngôn ngữ không những chặt chẽ về mặt cú pháp mà còn chặt chẽ về mặt cấutrúc dữ liệu Chính vì vậy mà việc tiếp cận với ngôn ngữ lập trình Pascal là cơ hội
để học sinh rèn luyện tính tư duy logic, làm việc và giải quyết vấn đề có tính hệthống
Trong quá trình giảng dạy ở trên lớp, Giáo viên chúng ta cần truyền cảm hứngtới học sinh để học sinh có sự đam mê, yêu thích bộ môn tin học hơn để từ đó họcsinh có nhu cầu tìm tòi học hỏi về bộ môn này Trong công tác bồi dưỡng học sinhgiỏi cũng vậy, mỗi giáo viên đều có những phương pháp bồi dưỡng riêng củamình, nhưng đều cùng hướng đến một mục đích là để học sinh dễ nắm bắt đượcthuật toán và nắm vững chắc những kiến thức cơ bản để vận dụng vào giải quyếtcác bài toán nâng cao Trong chương trình tin học lớp 10, khi tìm hiểu về thuậttoán, chúng ta cũng đã làm quen với thuật toán kiểm tra một số nguyên dương cóphải là số nguyên tố hay không Và Thầy, cô giáo chúng ta cũng nhận thấy rằngtrong các dạng bài bồi dưỡng học sinh giỏi thì có rất nhiều bài toán về số nguyên
tố Tuy nhiên, qua quá trình giảng dạy cho thấy, đa số các em đều hiểu được kháiniệm số nguyên tố nhưng lại khó khăn trong việc xây dựng thuật toán cho bài toánnày, thậm chí những em thuộc đối tượng bồi dưỡng học sinh giỏi cũng chỉ đưa rađược những ý tưởng giải quyết bài toán mà chưa tối ưu Vậy nên muốn học sinhthuộc đối tượng bồi dưỡng học sinh giỏi có tư duy tốt để giải các dạng bài về sốnguyên tố thì giáo viên chúng ta cần hướng cho học sinh có ý tưởng tốt và nắmchắc phương pháp giải bài toán cơ bản nhất, từ đó xâu chuổi các dạng bài có liênquan với nhau hay nói cách khác là dạy từ cơ bản đến nâng cao theo từng chuyênđề
Xuất phát từ cơ sở trên, qua quá trình bồi dưỡng học sinh giỏi hằng nam tôi
đã xây dựng sáng kiến kinh nghiệm “Chuyên đề về số nguyên tố trong bồi dưỡng
học sinh giỏi môn tin học”.
1.2 Điểm mới của đề tài
Trên cơ sở nhận thức, tìm hiểu và phân tích, sáng kiến này đưa ra các bài toán
về số nguyên tố để xây dựng thuật toán và chương trình giải quyết các bài toán đó.Qua quá trình giảng dạy trên lớp, khi khảo sát học sinh về cách kiểm tra một sốnguyên dương có phải là số nguyên tố hay không thì đa số học sinh đều đưa rađược các ý tưởng cho bài toán Tuy nhiên các ý tưởng đó cho thấy các em mới chỉhình thành tư duy giải bài toán mà chưa quan tâm tới phạm vi giá trị dữ liệu được
Trang 5dùng trong bài toán hoặc chỉ đưa ra cách giải mà chưa tối ưu Chính vì vậy khi đixây dựng chương trình, các em sẽ gặp phải một số lỗi trong chương trình Đề tàinày góp phần thúc đẩy hướng phát huy tính tích cực của học sinh, giúp học sinh có
tư duy lập trình, và nắm chắc kiến thức khi được giải quyết các bài toán theochuyên đề, góp phần nâng cao kiến thức và khả năng thực hành cho giáo viên,trong việc dạy học và đặc biệt là ôn thi học sinh giỏi
Hiệu quả và chất lượng trong dạy học phụ thuộc vào nhiều yếu tố Tuy nhiênviệc giáo viên nhận thức vấn đề có sâu sắc, chính xác hay không, chuẩn bị kiếnthức có chu đáo hay không cũng như có phương pháp và kỹ thuật tốt để xử lý bàitoán là đóng vai trò hết sức quan trọng Cách nhận thức, cách hiểu, phân tích vàđưa ra các chương trình cụ thể mà tôi đưa ra sau đây, hy vọng sẽ góp một phần nhỏđịnh hướng để đồng nghiệp rút kinh nghiệm trong nhiệm vụ giảng dạy tốt môn Tinhọc và thực hiện tốt việc ôn thi học sinh giỏi
2 NỘI DUNG
2.1 Cơ sở lí luận
Ngôn ngữ lập trình Pascal là ngôn ngữ lập trình có cấu trúc, nó chặt chẽ vềmặt cú pháp mà còn chặt chẽ về mặt dữ liệu, là một tập con của ngôn ngữ máytính Đây là một dạng ngôn ngữ được chuẩn hóa Chính vì vậy, khi xây dựng cácchương trình trên ngôn ngữ này cần phải tuân thủ vào bộ nhớ và cấu trúc dữ liệu.Thông thường trong những dạng bài học sinh giỏi thì phạm vi giá trị dữ liệu củabiến được sử dụng trong chương trình và số lượng biến sử dụng trong chương trình
là rất phức tạp, học sinh cần có những phương pháp xử lý tốt để đảm bảo kết quảkhi chạy chương trình
Như vậy, việc đưa ra phương pháp và kỹ thuật xử lý dữ liệu lớn trong lậptrình với Pascal để xử lý một số bài toán khi phạm vị dữ liệu vượt quá phạm vi củaPascal, giúp cho học sinh và giáo viên có hướng xử lý tốt trong học lập trình và bồidưỡng học sinh giỏi
2.2 Thực trạng của vấn đề
* Điều kiện của bộ môn Tin học: SGK Tin học 11 biên soạn với tinh thầntruyền cho học sinh có được tư duy lập trình Nhưng trong việc ôn thi học sinh giỏithì cần cụ thể trong lập trình trên môi trường Pascal hoặc Free Pascal Như vậyviệc dạy học cho học sinh có chút khác biệt so với việc ôn thi học sinh giỏi
* Điều kiện của Nhà trường: Tình trạng chung của các trường THPT trongtỉnh nói riêng và cả nước nói chung, trang thiết bị của nhà trường còn nhiều thiếu
Trang 6thốn, thời gian ôn luyện học sinh giỏi cũng chưa được nhiều.
* Điều kiện của giáo viên: Nhà trường có 03 giáo viên tin học đều đạt chuẩn,tuổi đời trẻ, có năng lực, nhưng ý thức học hỏi để nâng cao trình độ chuyên môncủa bản thân còn chưa thực sự tích cực
* Điều kiện học sinh: Hầu hết học sinh đều là con em ở nông thôn Nhưng
do kinh tế địa phương những năm gần đây phát triển mạnh, các dịch vụ Internet vàkinh doanh máy tính trên địa bàn cũng phát triển nên học sinh ít nhiều đã được tiếpcận máy tính và Internet Mặt khác, đây là môn học mới lại được ứng dụng nhiềutrong thực tế đời sống Vì vậy, học sinh cũng khá hứng thú và có ý thức với mônhọc nên trong nhiều tiết học các em đều hăng say xây dựng bài và tìm hiểu thực tếđối với môn học Tuy nhiên, đây là môn học khó đồng thời lại liên quan đến rấtnhiều lĩnh vực khoa học tự nhiên, xã hội nên việc tiếp cận của học sinh cũng tươngđối khó Kết quả học tập của môn Tin học và kết quả của học sinh giỏi chưa cao
Kết quả bồi dưỡng học sinh giỏi
Năm học 2015-2016 có 2 giải KK
Năm học 2016-2017 có 2 giải KK
Năm học 2017-2018 có 1 giải nhì, 1 giải ba và 1 giải khuyến khích
2.3 Nội dung và giải pháp thực hiện
Trước hết tôi đã đưa ra bài toán như sau:
Bài toán gốc: “ Kiểm tra tính nguyên tố của một số nguyên dương ”.
Đây là bài toán cơ bản trong sách giáo khoa tin học lớp 10 mà học sinh đãtìm hiểu về thuật toán của bài toán
Ý tưởng: Một số nguyên dương N là số nguyên tố nếu nó có đúng 2 ước số khác
Trang 7Từ đó ta có thuật toán sau:
Thuật toán mô tả theo cách liệt kê như sau:
Bước 1: Nhập số nguyên dương N;
Bước 2: Nếu N = 1 thì thông báo N không nguyên tố rồi kết thúc;
Bước 3: Nếu N < 4 thì thông báo N là nguyên tố rồi kết thúc;
Bước 4: i 2;
Bước 5: Nếu i > [ N] thì thông báo N là nguyên tố rồi kết thúc;
Bước 6: Nếu N chia hết cho i thì thông báo N không nguyên tố rồi kết thúc; Bước 7: i i + 1 rồi quay lại bước 5.
Dưới đây là ví dụ mô phỏng việc thực hiện thuật toán trên.
hết
không?
Không Không Không Không
Chia hết không?
If N=1 then begin nt:= false; exit end;
If (N=2) or (N=3) then begin nt:=true; exit end;
Trang 8Đây là chương trình con kiểm tra 1 số nguyên dương bất kỳ có phải là số nguyên tố ?
Hàm nt(N) trên tiến hành kiểm tra lần lượt từng số nguyên k trong đoạn từ 2 đến
phần nguyên căn bậc 2 của N để cải tiến cần giảm thiểu số các số cần kiểm tra.
Thay vì kiểm tra các số k ta sẽ chỉ kiểm tra các số k có tính chất giống tính chất
của số nguyên tố Vậy tính chất của số nguyên tố như thế nào ?
Tính chất số nguyên tố:
Trừ số 2 và số 3 các số nguyên tố có dạng 6k1 ( vì các số có dạng 6k2 thìchia hết cho 2, 6k 3 thì chia hết cho 3)
Từ đó ta có chương trình con: Kiểm tra 1 số nguyên dương bất kỳ có phải là số nguyên tố ? áp dụng tính chất số nguyên tố như sau:
Chương trình 2:
function nt(N:longint):boolean;
var k,m,i:longint;
begin
if (N=2) or (N=3) then begin nt:=true; exit; end;
if( (N=1) or (N mod 2=0) or (N mod 3 =0)) then begin nt:=false; exit; end;
k:= -1;
M:=trunc(sqrt(N));
repeat inc(k,6);
if (N od k =0) or (n mod (k+2) = 0) then break;
until k>M
if k>Mthen nt:=true else nt:=false;
end;
Như vậy để có thể giải quyết các bài toán về số nguyên tố trong lập trình với dữ liệu lớn ta đi theo hướng xây dựng chương trình cho bài toán gốc với sự lựa chọn chương trình 2.
Với cách viết chương trình cho bài toán gốc với chương trình dạng 2 Ta cóthể sử dụng dữ liệu với số nguyên dương N là rất lớn không chỉ là kiểu dữ liệu
longint mà thay vào đó là dữ liệu kiểu int64 cụ thể như sau:
Trang 9function nt(N:int64):boolean;
var k,m,i:longint;
begin
if (N=2) or (N=3) then begin nt:=true; exit; end;
if( (N=1) or (N mod 2=0) or (N mod 3 =0)) then begin nt:=false; exit; end;
k:= -1;
M:=trunc(sqrt(N));
repeat inc(k,6);
if (N od k =0) or (n mod (k+2) = 0) then break;
until k>M
if k>Mthen nt:=true else nt:=false;
end;
2.3.2 Các dạng bài toán về số nguyên tố
Bài toán 1: Viết chương trình liệt kê các số nguyên tố trong đoạn từ [2,N]
Dữ liệu vào: Tệp văn bản nguyento.inp chứa duy nhất số nguyên dương N
Kết quả: Ghi vào tệp văn bản nguyento.out các số nguyên tố, mỗi số cách nhau ítnhất 1 kí tự trống Ghi trên cùng 1 dòng
Ý tưởng bài toán này như sau:
-Xây dựng hàm nguyên tố
- Xây dựng chương trình con liệt kê các số nguyên tố trong đoạn từ 2 đến phầnnguyên N Bằng cách sử dụng lời gọi hàm nt(i) Nếu hàm nt(i) (trong đó i nhậngiá trị từ 2 đến N) nếu hàm nhận giá trị đúng thì giá trị i được ghi vào tệp write(f2,i,’ ‘)
Thông qua đoạn chương trình:
For i:=2 to N do
If nt(i) then write(f2, i, ‘ ‘);
Trang 10Chương trình cụ thể với bài toán 1:
if (n=2) or (n=3) then begin nt:=true; exit; end;
if (n=1) or (n mod 2=0) or (n mod 3=0) then begin nt:=false; exit ; end;M:=trunc(sqrt(n));
Trang 11Bài toán 2: Số siêu nguyên tố
Hãy viết chương trình đọc dữ liệu vào là một số nguyên N (0<N<10) và đưa rakết quả các số siêu nguyên tố có N chữ số và số lượng của chúng
Dữ liệu vào: Tệp văn bản SNT.INP chứa duy nhất số nguyên dương N
Kết quả: Ghi vào tệp SNT.OUT
- Dòng 1: Ghi các số siêu nguyên tố có N chữ số
- Dòng tiếp theo ghi số lượng các số siêu nguyên tố
SNT.INP SNT.OUT
5 23333 23339 23399 23993 29399 31193 31379
37337 37339 37397 59393 59399 71933 7333173939
Ý tưởng của bài toán như sau:
- Xây dựng hàm số nguyên tố
- Xây dưng hàm kiểm tra số i có phải là số siêu nguyên tố hay không
Cụ thể ta xây dựng hàm kiểm tra siêu nguyên tố như sau :
Nếu nt(i):=false thì SNT:=False ;
Nếu nt(i)=true thì tiến hành giảm giá trị của i bằng cách chia nó cho 10 (i:= i div10) và lại quay lại kiểm tra i cho đến khi i giảm xuống i=0 then snt:=true;
Trang 12Chương trình con về kiểm tra một số nguyên bất kỳ có phải là số siêu nguyên tố hay không? như sau:
function snt(i:longint):boolean;
beginsnt:=false;
Ở chương trình con kiểm tra một số nguyên bất kỳ có phải là số siêu nguyên
tố Ta đã sử dụng đến hàm kiểm tra một số nguyên dương có phải là số nguyên tốthông qua lời gọi nó Như vậy với bài toán về số siêu nguyên tố nếu ta xây dựngđược chương trình con kiểm tra một số nguyên bất kỳ là số nguyên tố hay không?Thì dễ dàng xây dựng được chương trình con là số siêu nguyên tố
- Xây dựng chương trình con thủ tục ghi vào tệp các số siêu nguyên tố đồng thờiứng với mỗi số là siêu nguyên tố thì đếm
- Ý tưởng ghi các số siêu nguyên tố vào tệp:
+ Trước hết tìm giá trị đầu và giá trị cuối của số có n chữ số
Gtd:=1; gtc:=1;
For i:=1 to n-1 do gtd:=gtd*10;
Gtc:=(gtd*10)-1;
+ Sau khi tìm được giá trị đầu và giá trị cuối thì tiến hành kiểm tra các số có n chữ
số trong khoảng từ GTD đến GTC Nếu là số siêu nguyên tố thì ghi vào tệp vàđồng thời đếm
Thể hiện qua đoạn lệnh sau:
For i:=gtd to gtc do
If snt(i) then begin write(f2, i,’ ‘); inc(dem); end;
Xây dựng cụ thể chương trình con ghi vào tệp các số siêu nguyên tố đồng thời ứng với mỗi số là siêu nguyên tố thì đếm:
Trang 14if (n=2) or (n=3) then begin nt:=true; exit; end;
if( (n=1)or (n mod 2=0)or (n mod 3 =0) )then begin nt:=false; exit; end;k:=-1;
Trang 15Liên quan đến hàm nguyên tố còn có các bài toán về tính chất của một dãy số
Cụ thể bài toán sau:
Bài toán 3: Dãy số đặc biệt
Dãy số A1,A2, ,An được gọi là dãy số đặc biệt nếu nó thỏa mãn các điều kiện sau
- Là dãy số giảm dần
- Với mỗi A thì A’ hoặc là số nguyên tố hoặc là ước của một trong các số từA1 đến Ai-1
Em hãy tìm dãy số đặc biệt dài nhất bắt đầu từ N
Dữ liệu vào: Từ File văn bản DAYSO.INP là một số nguyên dương N(N<10000)
Kết quả: Ghi ra File văn bản DAYSO.OUT là dãy số tìm được các số cách nhaubởi dấu cách
DAYSO.INP DAYSO.OUT
12 12 11 7 6 5 4 3 2 1
Trang 16Ý tưởng bài toán:
- Xây dựng hàm kiểm tra tính nguyên tố
- Tìm các số thỏa mãn điều kiện là số nguyên tố hoặc là ước của N ghi vào tệp
procedure xuly;
begin write(f2,n,' ');
for j:=n-1 downto 1 do
if (N mod j =0) or (nt(j)) then write(f2,j,' ');
end;
Như vậy với dạng bài toán này chúng ta nghĩ ngay đến hàm nguyên tố.
Chương trình cụ thể với bài toán 3:
if (n=2) or (n=3) then begin nt:=true; exit; end;
if( (n=1)or (n mod 2=0)or (n mod 3 =0) )then begin nt:=false; exit; end;k:=-1;
Trang 17Bài toán 4 DÃY CON TĂNG NGUYÊN TỐ
Cho 1 dãy N số nguyên dương Dãy con tăng nguyên tố M phần tử là 1 dãy số códạng Ai1 Ai2 Ai3 … Aim và thỏa điều kiện
Trang 18Dữ liệu nhập: vào từ file văn bản DAYCON.INP với định dạng như sau:
- Dòng đầu tiên là số N <= 1000 (tức là số phần tử của dãy số ban đầu)
- Dòng tiếp theo chứa N số nguyên là giá trị các phần tử của dãy số(0<=A[i]<=100000)
Dữ liệu xuất: xuất ra file văn bản DAYCON.OUT
- Dòng 1: Số M tức phần tử của dãy con tăng nguyên tố dài nhất
- Dòng tiếp theo ghi ra giá trị của M phần tử của dãy con tăng dài nhất
Chương trình cụ thể với bài toán 4: