Tải bản đầy đủ (.docx) (20 trang)

SKKN vận dụng lý thuyết giải bài toán tin học

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (213.16 KB, 20 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>I. PHẦN MỞ ĐẦU1. Lý do chọn sáng kiến</b>

Trong giai đoạn hiện nay máy tính điện tử đã nhanh chóng thâm nhập vào mọi lĩnh vực sản xuất, kinh tế và đời sống xã hội. Chính vì vậy việc dạy tin học ở trường phổ thơng có vai trị quan trọng vì việc giáo dục đó là nhằm chuẩn bị cho thế hệ trẻ Việt Nam về mặt tri thức, kỹ năng, về mặt năng lực, trí tuệ và các phẩm chất cần thiết giúp học sinh thích ứng với thời đại 4.0. Giúp cho học sinh sau khi tốt nghiệp nắm được một số yếu tố cơ bản của tin học. Xét về mặt năng lực, trí tuệ: Giúp phát triển nhiều phương thức, tư duy liên hệ mật thiết với việc sử dụng kỹ thuật xử lý thơng tin như: tư duy thuật tốn, tư duy điều khiển, tư duy ngôn ngữ,... Ðồng thời hình thành và phát triển năng lực hoạt động trí tuệ nói chung như phân tích, tổng hợp, khái qt hóa, trừu tượng hóa,... Để xử lí thơng tin tốt và để nâng cao năng lực học tập cho học sinh thì việc học ngơn ngữ lập trình pascal là một nhiệm vụ hết sức quan trọng.

Tuy nhiên học sinh gặp phải rất nhiều khó khăn khi lập trình Pascal, vì học sinh chưa chủ động rèn luyện cách trình bày thuật tốn, các lập luận, những kiến thức được áp dụng trong quá trình lập trình nên dẫn đến thụ động, rập khn, thiếu tính sáng tạo.

Để tiếp tục hoàn chỉnh chuyên đề bồi dưỡng HSG Tin học “Ứng dụng lý thuyết toán để giải các bài toán tin”; qua quá trình nghiên cứu, giảng dạy, tham khảo ý kiến đồng nghiệp, tôi thấy rằng đa số các bài toán trong tin học về số thường đề cập nhiều đến số nguyên tố, xử lí trên các số ngun tố. Chính vì vậy tôi chọn viết sáng kiến “Ứng dụng lý thuyết toán để giải các bài toán tin”.

<b>2. Phạm vi và đối tượng của sáng kiến2.1. Phạm vi</b>

- Phạm vi nghiên cứu tại trường PTDTNT Lục Nam trong thời gian từ năm 2021 đến nay.

<b>2.2. Đối tượng</b>

- Học sinh trường PT DTNT huyện Lục Nam.

<b>II. PHẦN NỘI DUNG</b>

<b>1. Thực trạng của vấn đề mà sáng kiến cần giải quyết</b>

<i><b>1.1. Ưu điểm</b></i>

- Được sự quan tâm của Ban giám hiệu nhà trường, tổ chun mơn.

- Tập thể nhà trường đồn kết và thống nhất trong việc thực hiện nhiệm vụ. Đội ngũ giáo viên đủ về số lượng. Giáo viên nhiệt huyết, có tinh thần trách nhiệm với học sinh.

- Giáo viên và học sinh và được hưởng chính sách ưu đãi của Đảng và Nhà nước nên yên tâm trong công tác giảng dạy, học tập.

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

- Học sinh ở nội trú nên thuận lợi cho việc bồi dưỡng CLB.

<i><b>1.2. Hạn chế và nguyên nhân hạn chế* Giáo viên:</b></i>

- Sự quan tâm đổi mới phương pháp của giáo viên chưa đồng đều, chưa thực sự đi vào chiều sâu; đơi khi cịn qua loa, hình thức. Việc thực hiện tiết dạy của giáo viên vẫn chưa thật sự hấp dẫn, lôi cuốn học sinh; còn nhiều học sinh thụ động trong việc tiếp thu kiến thức dẫn đến giờ học kém hiệu quả.

+ Giáo viên còn ngại đổi mới, còn hạn chế trong phương pháp dạy học, sử dụng đồ dùng dạy học chưa thường xuyên.

+ Giáo viên trực ban chưa thực sự quan tâm sâu sát, chưa gần gũi nắm bắt tâm tư tình cảm và kịp thời chia sẻ với học sinh những khó khăn, bất ổn trong cuộc sống.

- Tâm lý học sinh đa số coi Tin học là môn tự chọnnên chưa chú ý nhiều trong quá trình học tập.

- Học sinh sống trong thời đại cơng nghệ có q nhiều cám dỗ dẫn đến lơ là trong học tập, không đặt mục tiêu học tập lên hàng đầu.

<i><b>* Học sinh:</b></i>

- Trên 95% học sinh là con em dân tộc thiểu số và 100% học sinh đang sinh sống tại vùng đặc biệt khó khăn của huyện; 100% học sinh trong CLB Tin học trẻ là người dân tộc thiểu số nên trình độ nhận thức của các em cịn nhiều hạn chế.

- Một số học sinh còn lười học, ham chơi, vô cảm với kết quả học tập, một bộ phận học sinh khơng có động lực phấn đấu học lên cao để trở thành học sinh khá giỏi.

- Một số học sinh chưa thực sự đam mê, thiếu tập trung.

- Học sinh bị phân tán bởi một số câu lạc bộ văn hóa và thể thao khác.

<b>2. Các giải pháp thực hiện2.1. Số nguyên tố</b>

<i><b>2.1.1. Kiến thức cơ bản trong toán học</b></i>

<i>* Định nghĩa số nguyên tố</i>

<i>Một số nguyên p (p>1) là số nguyên tố nếu p có đúng hai ước số là 1 vàp. Một số nguyên lớn hơn 1 mà không là số nguyên tố được gọi là hợp số.</i>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

- Bổ đề 2: Mọi hợp số có ước thực sự nhỏ hơn hoặc bằng căn bậc hai của nó (ước thực sự là ước khác 1 và khác chính nó)

<i>Chứng minh bổ đề 2: Vì n là hợp số nên ta có: n = a.b với 1 < a, b < n</i>

Nếu đồng thời a, b > √<i><small>n</small></i> thì n= √<i><small>n</small>. √<small>n</small> <a.b =n (mâu thuẫn)Vậy có ít nhất một trong hai số a, b phải nhỏ hơn hoặc bằng √<small>n</small></i>

Nhận xét: từ bổ đề trên ta có nhận xét sau:

Mỗi hợp số phải có ước nguyên tố nhỏ hơn hoặc bằng căn bậc hai của nó. - Định lý (Định lý Fecma nhỏ): Nếu p là số nguyên tố và a là số tự nhiên

<i>thì a<small>p</small> mod p = a.</i>

* Từ những lý thuyết tốn cơ sở trên, ta có thể ứng dụng chúng vào các giải thuật kiểm tra số nguyên tố trong tin học.

<i><b>2.1.2. Giải pháp kiểm tra số nguyên tố trong tin học</b></i>

<i>- Bài toán: Kiểm tra số nguyên dương n có phải là số nguyên tố không?- Ý tưởng: Nếu n>1 không chia hết cho số nguyên nào trong tất cả các</i>

Để cải tiến, ta giảm số lần kiểm tra, ta kiểm tra xem có tồn tại một số nguyên

<i>tố k (2<small>≤ k ≤</small></i><sub>√</sub><i><small>n</small>) mà k là ước của n thì n không phải là số nguyên tố, ngược lại n là sốnguyên tố. Thay vì kiểm tra k là số nguyên tố trên đoạn [2, √<small>n</small>] ta kiểm tra số k cótính chất giống với tính chất của số ngun tố trong đoạn [2, </i><sub>√</sub><i><small>n</small></i>]:

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<i>if (n = 2) or (n = 3) then exit (true);</i>

<i>if (n = 1) or (n mod 2 = 0) or (n mod 3 = 0) then exit (false);</i>

<i>Nhận xét: Với hai giải pháp trên, ta có thể chạy chương trình với n =</i>

10<small>6</small><i>, khi n lớn (khoảng 10</i><small>7</small> trở đi) chương trình chạy chậm. Muốn kiểm tra những 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 và kiểm tra Miller-Rabin là tiêu biểu.

<i><b>* Giải pháp 3 : Kiểm tra nguyên tố dùng định lý Fecmat nhỏ</b></i>

<i>- Ý tưởng:</i>

<i><b>Lặp k lần { </b></i>

<i>+ Chọn giá trị ngẫu nhiên a, 2 ≤ a ≤ p-1</i>

+ Nếu a<small>p-1</small><i><small>≡</small><b>1 (mod p) thì tăng biến đếm c (số lần thừa nhận p có thể là</b></i>

<i>nguyên tố), ngược lại thì p là hợp số và thoát.</i>

}

<i>Nếu tỉ số c/k > xacsuat thì có thể chấp nhận p là ngun tố (với xác suất sai</i>

<i>Giải thuật :</i>

<i>function is_prime3(p : int64): boolean; Var test,dem,a: longint;</i>

Begin

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<i>Trong giải thuật prime_3 trên, ta có sử dụng hàm luythua(x,y,n). Hàmluythua(x,y,n) được viết như sau:</i>

<i>function luythua(x,y,n: int64): int64;</i>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<i>function is_prime4(n : int64): boolean; var dem, r, a, x : int64; k: longint; </i>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<i>- Bài toán: In ra các số nguyên tố trong [1; n].</i>

<i>- Ý tưởng : Với bài tốn này, ta có thể thử lần lượt các số m trong đoạn[1; n], rồi kiểm tra tính nguyên tố của m dựa vào các giải thuật trên.</i>

<i>- Nhận xét: Cách này đơn giản nhưng chạy chậm; để cải tiến, ta sử dụng</i>

tính chất của số nguyên tố để loại bỏ trước những số không phải là nguyên tố và không cần kiểm tra các số này; ta sử dụng sàn nguyên tố như sàn Eratosthene.

<i>- Ý tưởng : (sàn nguyên tố Eratosthene)</i>

Trước tiên xóa bỏ số 1 ra khỏi tập các số nguyên tố; Số tiếp theo số 1 là số 2, là số nguyên tố, xóa tất cả các bội của 2 ra khỏi bảng. Số đầu tiên khơng bị xóa sau số 2 (số 3) là số nguyên tố, xóa bội của 3,…. Thuật toán tiếp tục cho đến khi gặp số nguyên tố lớn hơn √<i><small>n</small></i> thì dừng lại. Tất cả các số chưa bị xoá là

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<i>Bài 1: Nhập một mảng 2 chiều m dòng, n cột từ file BANGSO.TXT. Cấutrúc file như sau: dòng đầu là 2 số m và n, cách nhau bằng dấu cách, m dòng sau,</i>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<i> 2 : (Sinh số nguyên tố) Tạo ra mọi số nguyên tố giữa hai số đã cho.</i>

<i><b>Input . Tệp SINH_NT.INP Dòng đầu tiên ghi số t là số test (t ≤ 10). Trong</b></i>

<i>mỗi t dòng tiếp theo là hai số m và n (1 ≤ m ≤ n ≤ 10</i><small>9</small><i>, n-m ≤ 10</i><small>5</small>) cách nhau một dấu cách.

<i><b>Output . Tệp SINH_NT.OUT với mỗi test ghi mọi số nguyên tố p sao cho</b></i>

<i>m ≤ p ≤ n, mỗi số một dòng, mỗi test cách nhau một dòng trống </i>

Start, stop : tdatetime;

<i>procedure phantich(x: int64; var d, s : int64);</i>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<i>function prime(n : int64): boolean; </i>

<i>var dem, r, a, x : int64; k: longint; </i>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<i>close(f); close(g); stop := now;</i>

writeln('Miller-Rabin, Time: ',(stop-start)*3600*24:0:5);

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<i><b>Input . Tệp YESNO.INP Dòng đầu tiên ghi số t là số các test, sau đó là</b></i>

<i>t test (t≤500): mỗi test trên một dòng chứa một số nguyên N (2 ≤ N < 2</i><small>31</small>)

<i><b>Output . Tệp YESNO.OUT với mỗi test, ghi trên một dòng một xâu</b></i>

“YES” nếu số đã cho là nguyên tố, hoặc xâu “NO” trong trường hợp ngược lại.

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<i>var dem, r, a, x : int64; k: longint; </i>

<i>close(f); close(g); stop := now;</i>

writeln('Miller-Rabin, Time: ',(stop-start)*3600*24:0:5);

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<i>Cho trước hai số nguyên dương a và b. Tìm xem trong đoạn [a;b] có baonhiêu số ngun tố vịng. Hạn chế: a<b≤10</i><small>6</small>

<i><b>Input . Tệp nt_vong.inp gồm một dòng ghi hai số a và b</b></i>

<i><b>Output . Tệp nt_vong.out ghi số lượng số nguyên tố vòng trong [a; b].</b></i>

uses crt;

const fi = 'nt_vong.inp'; fo = 'nt_vong.out'; var <i>a, b, n, x : longint; </i>

<i>procedure chuyen(var s: string); </i>

var code : integer; begin

<i>s := copy(s,2,length(s))+s[1];</i>

end;

<i>function prime(a: int64): boolean; var i, sqrt_a: longint;</i>

<i>if ((a=2) or (a=3)) then exit(true);</i>

<i>if ((a<2) or (a mod 2=0) or (a mod 3=0)) then exit(false);</i>

<i>function vong(x : longint): boolean;</i>

<i>var i, l : integer; s: string; code: integer; </i>

begin

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<i> 5 : Cho số tự nhiên n<small>≤</small>480.000. Hãy phân tích n! ra tích của các</i>

thừa số nguyên tố theo trật tự tăng dần. Ví dụ, 13!=2<small>10</small>.3<small>5</small>.5<small>2</small>.7.11.13. Kết quả hiển thị dưới dạng các dòng, mỗi dòng một số nguyên tố tiếp đến là số mũ tương ứng. Các số trên cùng dòng cách nhau qua dấu cách. Ví dụ trên cho ta kết quả hiển thị như sau:

<i><b>Nhận xét: Cho số tự nhiên N và một số nguyên tố p. Khi đó,</b></i>

<i>Nếu viết dãy thừa số 1, 2, ..., N vào một bảng có p cột thì ta thấy có n</i><small>1</small> =

<i>N div p dòng chứa p, 2p,...,n<small>1</small>.p (ở cột cuối cùng). Nhóm các phần tử này lại tađược, 1p.2p....n<small>1</small>p = (1.2...n<small>1</small>).p</i><small>n1</small><i>. Thực hiện tương tự với tích 1.2...n</i><small>1</small> ta thu được

<i>n</i><small>2</small><i> = n</i><small>1</small><i> div p dòng chứa p, 2p,...,n<small>2</small>.p... Từ đây ta suy ra lũy thừa k của p, p<small>k</small> trongdạng phân tích của N! sẽ là k = n</i><small>1</small><i>+n</i><small>2</small><i>+...+n</i><small>v</small><i>, trong đó n</i><small>i</small><i> = n</i><small>i-1</small><i> div p, n</i><small>1</small><i> = N divp, n</i><small>v</small><i> = 0, i= 2..v. Hàm tính lũy thừa của p trong dạng phân tích của N! bằng các</i>

phép chia liên tiếp khi đó sẽ như sau,

<i>function Power(n,p: longint): byte; var k: byte;</i>

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<i><b>Ta dùng hàm NextPrime để sinh lần lượt các số nguyên tố p trong khoảng2..N và tính Power(N,p). Nếu giá trị này lớn hơn 0 thì ta hiển thị kết quả.</b></i>

<i>procedure Fac(n: longint); </i>

<i><b>+ Hàm IsPrime(p) kiểm tra p có phải là số nguyên tố hay không bằng</b></i>

cách xét xem trong khoảng từ 2 đến √<i><small>p</small></i> có ước nào không.

<i>function IsPrime(p: longint): Boolean;</i>

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<i><b>+ Hàm NextPrime(p) sinh số nguyên tố sát sau p bằng cách duyệt tuần tự</b></i>

các số lẻ sau p là p+2k nếu p lẻ và (p-1)+2k, nếu p chẵn

<i>function NextPrime(p: longint): longint;</i>

<b>3. Khả năng áp dụng của sáng kiến</b>

Sáng kiến đã được áp dụng vào công tác bồi dưỡng HSG tại trường PTDTNT huyện Lục Nam.

Đồng thời, sáng kiến này cũng có thể áp dụng rộng rãi như một tài liệu tham khảo cho các thầy cô GV dạy bộ môn Tin học cấp THCS và THPT, cho học sinh câu lạc bộ Tin học khối lớp 8,9 của các trường trong huyện, nhằm nâng cao kiến thức và kĩ năng lập trình cho HS. Qua đó, góp phần vào việc nâng cao chất lượng dạy và học môn Tin học ở trường THCS.

<b>4. Hiệu quả dự kiến có thể thu được khi áp dụng sáng kiến</b>

<i><b>4.1. Minh chứng:</b></i>

Qua nhiều năm dạy câu lạc bộ HSG Tin học 8, với sự đầu tư nghiên cứu của bản thân, tôi đã rút ra được một số kinh nghiệm như sau:

- Trong q trình ơn luyện HSG giáo viên cần phân các dạng bài toán cho học sinh, hướng dẫn học sinh cách phân tích, xác định bài tốn; tìm thuật tốn cho bài tốn; viết chương trình và cuối cùng là chạy thử với các kiểu dữ liệu kiểm tra.

Bằng việc đưa ra một hệ thống các bước thực hiện giải một bài toán kết hợp với các bài tập minh họa, cùng với những chú ý khi thực hiện phân tích, tơi nhận thấy rằng:

+ Học sinh có hứng thú học tập hơn, đặc biệt những học sinh mới tham gia CLB có những tiến bộ rõ dệt.

+ Với những học sinh khá, giỏi sau khi tiếp cận các biện pháp trên thì ln hăng say tìm tịi và vận dụng giải những bài tập khó rất hiệu quả.

<i><b>4.2. Hiệu quả của giải pháp:</b></i>

- Trong năm học 2020 - 2021 khi chưa áp dụng sáng kiến “Ứng dụng lý thuyết toán để giải các bài toán tin”. Tỷ lệ học sinh u thích mơn học khơng cao do gặp nhiều khó khăn trong vận dụng làm bài tập.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

+ Giải Tin học trẻ cấp Huyện đạt: 02 giải Khuyến khích. + Giải Tin học cấp Tỉnh đạt: Không giải.

- Trong năm học 2021 - 2022, 2022 - 2023 sau khi hoàn thành nghiên cứu sáng kiến “Ứng dụng lý thuyết toán để giải các bài tốn tin” tơi đã mạnh dạn áp dụng q trình giảng dạy học sinh trường PT DTNT Lục Nam và kết quả thu được khả quan. Cụ thể:

+ Tỉ lệ học sinh u thích mơn Tin tăng lên so với năm học trước. + Năm học 2021-2022:

+ Giải Tin học trẻ cấp Huyện đạt: 02 giải Ba. (+) Giải Tin học cấp Tỉnh đạt: 01 giải Nhất. (+) Năm học 2022-2023:

(+) Giải Tin học trẻ cấp Huyện đạt: 01 giải Nhất; 01 giải Ba; 01 giải KK.

<b>III: PHẦN KẾT LUẬN1. Ý nghĩa của sáng kiến</b>

Tin học và Toán học là hai bộ môn khác biệt nhưng không độc lập với nhau. Biết vận dụng những kết quả và những suy luận, chứng minh từ toán học sẽ làm cho những bài toán tin được giải thật đơn giản, và kết quả rất tốt.

Như vậy, Tin học đã sử dụng Toán học rất nhiều. Đặc biệt số nguyên tố và xử lí trên các số nguyên tố mà dựa vào các định lý, bổ đề trong toán học mà Tin học đã xây dựng được những thuật toán, giải thuật rất hữu dụng, ngày nay việc kiểm tra số ngun tố khơng cịn là vấn đề khó khăn như trước đây chưa có sử dụng tin học.

Trong phạm vi nội dung của sáng kiến, tôi chỉ giới thiệu được một số giải pháp cơ bản trong việc bồi dưỡng HSG môn Tin học THCS. Thời gian qua, tôi đã đúc kết và áp dụng tương đối thành công theo chuyên đề, bồi dưỡng HSG môn Tin học tại trường.

Mặc dù vậy, đây mới chỉ là kinh nghiệm của bản thân, hơn thế nữa, trong quá trình thực hiện đề tài, tuy đã hết sức cố gắng, nhưng do thời gian và khả năng có hạn nên khơng thể nào tránh khỏi những thiếu sót nhất định. Do đó, tơi rất mong được sự góp ý chân thành và thẳng thắn trên tinh thần xây dựng của quý đồng nghiệp, để sáng kiến của tơi có tính khả thi và được áp dụng rộng rãi hơn.

<b>2. Những kiến nghị, đề xuất</b>

- Các cấp có liên quan cần trang bị cơ sở vật chất phòng thực hành Tin học kịp thời để tạo điều kiện cho giáo viên bồi dưỡng được tốt hơn.

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<b>TÀI LIỆU THAM KHẢO</b>

1. SGK, SBT, SGV tin học 8.

2. Tài liệu bồi dưỡng giáo viên Tin học 8.

3. Tài liệu “Một số vấn đề về đổi nới phương pháp dạy học bậc THCS môn tin học

<i>4. Nguyễn Xuân Huy, 2008, tuyển các bài toán tin nâng cao cho họcsinh và sinh viên giỏi “Sáng tạo trong thuật tốn và lập trình”, NXB Giáo dục,</i>

tập 1, tập 2, tập 3.

<i>5. Kenneth H. Rosen, Toán học rời rạc ứng dụng trong tin học, NXB</i>

Giáo dục, 2007, người dịch Phạm Văn Thiều và Đặng Hữu Thịnh.

6. Một số trang web: o/index.php?...Olympic Tin học Việt Nam.

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<b><small>NHẬN XÉT, ĐÁNH GIÁ, XẾP LOẠI CỦA HỘI ĐỒNG KHOA HỌC CẤP</small></b>

</div>

×