1. Trang chủ
  2. » Giáo Dục - Đào Tạo

SKKN chuyên đề về số nguyên tố trong bồi dưỡng học sinh giỏi môn tin học

33 497 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 33
Dung lượng 216 KB

Nội dung

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 1

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: 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 2

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

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 3

MỤ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 4

1 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 5

dù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 6

thố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 7

Từ đó 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 6k1 ( vì các số có dạng 6k2 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 9

function 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 10

Chươ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 11

Bà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 12

Chươ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 14

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 15

Liê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 17

Bà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 18

Dữ 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:

Ngày đăng: 11/11/2019, 12:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w