1. Trang chủ
  2. » Luận Văn - Báo Cáo

Một số kinh nghiệm giảng dạy về tính toán đồng dư cho học sinh giỏi quốc gia môn tin học

17 169 0

Đ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 17
Dung lượng 3,86 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tính toán đồng dư là một nội dung mới, được mở rộng giới hạn bài toán và tốc độ xử lí, được tôi nghiên cứu và đưa vào giảng dạy cho học sinh đội tuyển học sinh giỏi quốc gia, nhằm cung c

Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ

TRƯỜNG THPT CHUYÊN LAM SƠN

SÁNG KIẾN KINH NGHIỆM

MỘT SỐ KINH NGHIỆM GIẢNG DẠY VỀ TÍNH TOÁN

ĐỒNG DƯ CHO HỌC SINH GIỎI QUỐC GIA

MÔN TIN HỌC

Người thực hiện: Phạm Thị Nga Chức vụ: Giáo viên

SKKN thuộc lĩnh vực (môn): Tin học

Trang 2

Mục lục

1 Mở đầu 3

1.1 Lí do chọn đề tài 3

1.2 Mục đích nghiên cứu 3

1.3 Đối tượng nghiên cứu 3

1.4 Phương pháp nghiên cứu 3

1.5 Những điểm mới của SKKN 3

2 Nội dung sáng kiến kinh nghiệm 4

2.1 Cơ sở lí luận của sáng kiến kinh nghiệm 4

2.1.1 Định nghĩa và các tính chất của hàm nhân tính 4

2.1.2 Phương pháp để tính một hàm nhân tính 4

2.1.3 Tính toán đồng dư cơ bản 5

2.1.4 Các định lí dùng tính toán đồng dư và hệ quả 6

2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm 8

2.3 Các giải pháp được sử dụng để giải quyết vấn đề 8

Bài 1 POWERTOWER - Tháp luỹ thừa 9

Thuật toán 9

Code, Test và Cảm nhận 10

Bài 2 DPEQN - Congruence Equation 10

Thuật toán 11

Test và cảm nhận 11

Bài 3 GCDSUM - Tổng các ước chung lớn nhất 11

Thuật toán 12

Test và cảm nhận 12

Bài 4 VOSPOW - Độ bá đạo của đội hình 12

Thuật toán 13

Test và Cảm nhận 14

2.4 Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với bản thân, đồng nghiệp và nhà trường 14

3 Kết luận, kiến nghị 14

Tài liệu tham khảo 15

Trang 3

1 Mở đầu

1.1 Lí do chọn đề tài

Các bài toán trong thi học sinh giỏi quốc gia liên quan đến Toán học thường sẽ rơi vào hai mảng là số học và hình học Nếu biết nhiều về số học, học sinh sẽ có khả năng giải quyết nhiều bài toán khó và một nền tảng tốt để giải quyết nhiều bài toán khác

Các bài toán trong thi học sinh giỏi quốc gia thường đòi hỏi phải có một cái nhìn sâu sắc, vì vậy chỉ biết một số vấn đề về số học là không đủ Mọi bài toán đều yêu cầu học sinh phải biết một lượng kiến thức toán nhất định Ví dụ, một số bài toán yêu cầu học sinh phải giải một hệ nhiều phương trình hay tính xấp xỉ nghiệm của nhiều phương trình khác nhau

Tính toán đồng dư là một phạm trù khó, được tiếp cận và đưa vào thi cũng như trong giảng dạy, ôn luyện cho học sinh thi học sinh giỏi quốc gia những năm gần đây Hiện tại, chưa có các tài liệu nghiên cứu nào bàn sâu vào vấn đề này, đồng nghiệp, nhà trường chưa có kinh nghiệm để giảng dạy nội dung nâng cao này Vì vậy, trong hai năm học vừa qua, là giáo viên trực tiếp giảng dạy và phụ trách đội tuyển học sinh giỏi quốc gia tỉnh Thanh Hóa, tôi đã tìm hiểu và có “MỘT SỐ KINH NGHIỆM GIẢNG DẠY VỀ TÍNH TOÁN ĐỒNG DƯ CHO HỌC SINH GIỎI QUỐC GIA MÔN TIN HỌC” Nay xin được trình bày đề tài này như là sáng kiến kinh nghiệm của bản thân tôi

1.2 Mục đích nghiên cứu

Nội dung thi học sinh giỏi tin học cũng như lập trình thi đấu ngày càng mở rộng

và tăng độ khó do thực tiễn nhu cầu xã hội và bối cảnh phát triển của tin học, công nghệ thông tin hiện nay Tính toán đồng dư là một nội dung mới, được mở rộng giới hạn bài toán và tốc độ xử lí, được tôi nghiên cứu và đưa vào giảng dạy cho học sinh đội tuyển học sinh giỏi quốc gia, nhằm cung cấp cho học sinh phần kiến thức mới, mở rộng, đồng thời rèn luyện cho học sinh các kĩ năng giải quyết những bài toán trong phạm vi thi học sinh giỏi quốc gia về tính toán đồng dư

1.3 Đối tượng nghiên cứu

Sáng kiến kinh nghiệm trình bày một số kinh nghiệm, phương pháp trong quá trình giảng dạy về tính toán đồng dư cho học sinh giỏi quốc gia và những kết quả mà tôi

đã đạt được trong việc áp dụng nó giảng dạy cho đội tuyển học sinh giỏi tin học tỉnh Thanh Hóa năm học 2017 – 2018; 2018 – 2019

1.4 Phương pháp nghiên cứu

- Nghiên cứu lí thuyết ứng dụng

- Phương pháp thực nghiệm khoa học

- Phương pháp phân tích tổng kết kinh nghiệm

1.5 Những điểm mới của SKKN

- Chưa có đồng nghiệp, tài liệu nào trình bày hoặc tổng hợp về kinh nghiệm giảng dạy phần tính toán đồng dư cho học sinh giỏi môn tin học

- Những kinh nghiệm này được trình bày thông qua việc nghiên cứu, giảng dạy cơ

sở lí thuyết thuật toán và áp dụng giảng dạy từng bước cụ thể trên 4 bài toán điển hình áp dụng thuật toán theo cấp độ từ dễ đến khó, là những bài toán chưa được trình bày cách tiếp cận và lời giải ở một tài liệu nào khác

Trang 4

2 Nội dung sáng kiến kinh nghiệm

2.1 Cơ sở lí luận của sáng kiến kinh nghiệm

2.1.1 Định nghĩa và các tính chất của hàm nhân tính

2.1.1.1 Định nghĩa

- Hàm ( là số nguyên) là một hàm nhân tính nếu với mọi cặp số nguyên nguyên tố cùng nhau thì

- Hàm ( là số nguyên) là một hàm nhân tính hoàn toàn nếu với mọi cặp số nguyên thì

2.1.1.2 Tính chất

- Theo định lí số học cơ bản[1]: với mọi số nguyên dương n, tồn tại duy nhất một cách viết n dưới dạng tích của luỹ thừa các số nguyên tố:

sao cho là các số nguyên dương và

là các số nguyên tố tăng dần

Nếu là một hàm nhân tính thì:

- Dirichlet Convolution[2]: Nếu và là hai hàm nhân tính thì:

cũng là một hàm nhân tính

2.1.1.3 Một số hàm nhân tính cơ bản

- Hàm hằng định nghĩa là

- Hàm định nghĩa

- Hàm luỹ thừa ( là hằng số)

- Cả ba hàm trên đều là hàm nhân tính hoàn toàn

2.1.2 Phương pháp để tính một hàm nhân tính

2.1.2.1 Chứng minh hàm cần tính là một hàm nhân tính

a Chứng minh bằng công thức

Nếu hàm có công thức không phụ thuộc vào việc nó có là hàm nhân tính không, để chứng minh là hàm nhân tính, ta có thể chứng minh

(với mọi m, n nguyên tố cùng nhau) bằng cách biến đổi công thức Ví dụ xét hàm là số ước của

Nếu phân tích ra thừa số nguyên tố có dạng thì

Trang 5

Xét n và m nguyên tố cùng nhau và:

nên là một hàm nhân tính

b Chứng minh sử dụng Dirichlet Convolution

- Xét hai hàm và , cả hai hàm này đều là hàm nhân tính nên theo

Dirichlet Convolution,

Đây chính là hàm đếm số ước của

- Đôi khi có những hàm chứng minh bằng cách biến đổi vất vả hơn rất nhiều so với sử dụng Dirichlet Convolution Xét vì dụ hàm là tổng các ước của Sử dụng

Dirichlet Convolution với hai hàm và có:

Nên là một hàm nhân tính

2.1.2.2 Tìm cách tính trường hợp cơ bản

- Nếu có công thức cho f(n) thì sử dụng công thức này.

- Nếu không có công thức nhưng có một thuật toán để tính thì tính cho trường hợp này riêng.

2.1.2.3 Tính hàm nhân tính

- Nếu chỉ tính một giá trị của hàm thì phân tích ra thừa số nguyên tố và tính riêng cho từng thừa số nguyên tố Chỉ có tác dụng khi hàm này khó/ không có công thức để tính trong trường hợp chung

- Tính cho tất cả các giá trị thoả mãn Thực hiện sàng nguyên tố, trong lúc sàng với mỗi số lưu lại số nguyên tố bé nhất là ước của nó Duyệt tăng dần, kiểm tra kiểu của Nếu là luỹ thừa của một số nguyên tố thì dùng thuật toán riêng để tính giá trị, nếu không thì dùng tính chất của hàm nhân tính để tính

Thuật toán trên có độ phức tạp là với là số luỹ thừa của số nguyên tố không vượt quá và là độ phức tạp để tính hàm cho luỹ thừa của một số

Trang 6

nguyên tố Thuật toán thực hiện sàng nguyên tố mất , kiểm tra xem mỗi

số có phải là số nguyên tố không mất Đặc biệt nếu hàm cần tính là hàm nhân tính hoàn toàn, độ phức tạp giảm còn là O( ) Vì có số nguyên tố [3]

2.1.3 Tính toán đồng dư cơ bản

2.1.3.1 Định nghĩa

- Với mọi cặp số nguyên và , tồn tại duy nhất một cặp số nguyên và

sao cho: Khi đó ta nói là số dư khi chia cho và kí hiệu Kí hiệu để biểu diễn phép tính chia lấy dư ( )

- Hai số và thoả mãn thì ta nói và đồng dư với nhau qua modulo

Kí hiệu

2.1.3.2 Các tính chất cơ bản và các phép tính

Các số đều là số nguyên và

-Tính đối xứng: thì

-Tính tương đồng khi cộng cùng giá trị: thì

-Tính tương đồng khi nhân cùng giá trị: thì

-Tính tương đồng khi trừ: và thì

-Tính tương đồng khi nhân: và thì

-Tính tương đồng khi nâng lên cùng lũy thừa: thì

-Tính tương đồng khi tính toán đa thức: thì với mọi

đa thức có các bậc và hệ số của các bậc nguyên

-Tính loại trừ khi cộng: thì

-Tính loại trừ khi nhân: thì nếu và là hai số nguyên tố cùng nhau

2.1.3.3 Nghịch đảo modulo

-Sự tồn tại: Với hai số nguyên và , tồn tại duy nhất một số nguyên thoả mãn khi và chỉ khi và nguyên tố cùng nhau Khi đó ta kí hiệu là nghịch đảo nhân modulo của Lưu ý rằng

là một sự lạm dụng kí pháp vì không phải là một số nguyên khi a khác 1 hay -1, tuy nhiên vẫn được sử dụng thường xuyên để tiện cho việc trình bày

-Tính tương đồng khi nghịch đảo modulo: Nếu và tồn tại thì

Trang 7

-Nếu và tồn tại thì

-Với số nguyên tố thì tồn tại cho tất cả số nguyên thoả mãn khác

2.1.4 Các định lí dùng tính toán đồng dư và hệ quả

2.1.4.1 Định lí nhỏ Fermat [4]

Nếu là một số nguyên tố thì với mọi số nguyên , là một bội số của -Kí hiệu:

-Hệ quả khi và nguyên tố cùng nhau: Khi đó là nghịch đảo modulo của

2.1.4.2 Hàm phi Euler

a Định nghĩa và kí hiệu

Hàm phi Euler cho một số nguyên dương n được định nghĩa là số lượng số nguyên dương nguyên tố cùng nhau với sao cho Kí hiệu:

b Công thức tính

Công thức tích của Euler:

với mọi số nguyên tố

c Tính chất của hàm phi Euler

- là một hàm nhân tính

- là số chẵn nếu

-Nếu ( nguyên) với là một số nguyên tố thì

-Lưu ý

d Phương pháp tính hàm phi Euler

-Tính một giá trị Phân tích ra thừa số nguyên tố và sử dụng công thức nhân Euler Độ phức tạp của thuật toán này là độ phức tạp để phân tích ra thừa số nguyên tố

-Tính tất cả các giá trị với : Thực hiện sàng nguyên tố cho tất cả các số nguyên

Duyệt các giá trị của tăng, trong lúc sàng nguyên tố cũng lưu lại số nguyên tố nhỏ nhất là ước của gọi số đó là Tìm với lớn nhất sao cho

Nếu thì dùng công thức dành cho luỹ thừa của số nguyên tố, nếu không thì dùng tính chất của hàm nhân tính:

Trang 8

Code mẫu C++:

Code trên có độ phức tạp là tuy nhiên thời gian chạy rất nhanh kể cả khi

e Ứng dụng của hàm phi Euler trong tính toán đồng dư

- Định lí Euler: Nếu hai số nguyên dương và nguyên tố cùng nhau thì:

- Hệ quả của định lí Euler: nếu và nguyên tố cùng nhau

- Hệ quả của định lí Euler: nếu hai số và thoả mãn thì

nếu và nguyên tố cùng nhau

2.1.4.3 Định lí phần dư Trung Hoa

a Định nghĩa

-Xét hệ phương trình đồng dư:

const int maxp=1000000;

int p[maxp+1];

int phi[maxp+1];

void calculate_phi(){

phi[1]=1;

for(int i=2; i<=maxp; i++)

if(p[i]==0)

for(int j=i; j<=maxp; j+=i)

if(p[j]==0) p[j]=i;

for(int i=2; i<=maxp; i++){

int x=i; int t=p[i]; int k=1;

while(x%t==0){

k*=t; x/=t;

}

if(x>1) phi[i]=phi[k]*phi[x];

else phi[i]=i-i/p[i];

}

}

Trang 9

trong đó đôi một nguyên tố cùng nhau.

Định lí phần dư Trung Hoa chỉ ra rằng:

Hệ phương trình đồng dư nói trên có nghiệm duy nhất theo modul

b Trường hợp

-Vì đôi một nguyên tố cùng nhau nên giải được trường hợp khi

là sẽ giải được trường hợp tổng quát bằng cách thực hiện thuật toán lần, kiến cho việc cài đặt đơn giản hơn

Vậy Phương trình này có thể viết lại thành

với là các số nguyên Đây là một phương trình Diophantine tuyến tính, nên có thể giải được giá trị bằng giải thuật Euclid

mở rộng[5], từ đó suy ra

2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm

- Trong cả hai năm dạy bồi dưỡng đội tuyển học sinh giỏi quốc gia, hơn 60% học sinh đội tuyển chưa được tiếp cận với các bài toán về đồng dư, gần 40% học sinh còn lại dù đã được tiếp cận nội dung các bài toán đồng dư, nhưng chỉ bằng con đường tự tìm hiểu thêm các tài liệu chuyên môn trên internet và được viết bằng tiếng Anh là chủ yếu

- Đồng nghiệp trong nhà trường và cả những trường chuyên bạn trong nước cũng có rất ít tài liệu, kinh nghiệm giảng dạy về tính toán đồng dư cho đối tượng học sinh giỏi, vì đây

là một nội dung mở, mới

2.3 Các giải pháp được sử dụng để giải quyết vấn đề

Tôi đã đọc, tham khảo thêm các tài liệu viết về nội dung này trên internet, dịch thuật từ các tài liệu tiếng Anh trên các diễn đàn, website về thuật toán, lập trình thi đấu và tham khảo lời giải các kì thi tin học trong ba năm trở lại đây như IOI, APIO, BIO, ACM, Từ đó nhận định và đưa ra các bài tập theo dạng, phân lớp bài toán theo mức độ

từ dễ đến khó, dạy lí thuyết đến đâu áp dụng cho bài tập đến đó Cho học sinh phân tích, đoán nhận giải thuật, sau đó hướng dẫn giải thuật, cho học sinh lập trình giải bài Các bài tập đều được test cẩn thận cho học sinh, đánh giá độ phức tạp để học sinh có cơ sở so sánh, cảm nhận được sự tối ưu và cái hay, cái đẹp của lời giải, của thuật toán Cụ thể, dưới đây là 4 bài tập được chọn lọc và lồng ghép đưa vào giảng dạy theo mức độ từ dễ đến khó

Trang 10

Bài 1 POWERTOWER - Tháp luỹ thừa

Cho 2 số nguyên không âm với

Tháp luỹ thừa bậc của được định kí hiệu là được định nghĩa:

= ( lần) Chú ý rằng khi tính giá trị tháp lũy thừa thì các phép lũy thừa được thực hiện theo thứ tự từ trên xuống

Yêu cầu: Cho 3 số tính

Input: Nhập vào dữ liệu từ file POWERTOWER.INP:

Dòng đầu là số nguyên dương t, số bộ test

Trong t dòng tiếp theo, mỗi dòng 3 số nguyên dương a, n, m <=10^5 cách nhau bởi dấu cách

Output: Với mỗi dòng dữ liệu từ file input, ghi ra file POWERTOWER.OUT một dòng

là kết quả bài toán

Ví dụ:

6

1 4 100

4 2 100

3 3 1000

6 5 10000

2 100000 100

100000 20 78923

1 56 987 8656 36 41154

Thuật toán

- Định nghĩa hàm F(a, n, m) là kết quả của bài toán Các trường hợp đặc biệt gồm có:

F(1, n, m)=1%m;

F(a, n, 1)=0;

F(a, 0, m)=1%m;

F(a, 1, m)=a%m;

- Khi không trường hợp đặc biệt nào xảy ra, ta biết rõ a>1, m>1, n>1;

- Nhận thấy rằng để rút gọn bài toán, cần sử dụng hệ quả thứ 3 của định lí Euler, tuy nhiên nhận thấy rằng gcd(a, m) chưa chắc chắn đã bằng 1, vì vậy cần chia m thành hai phần:

m1 và m2 với m1*m2=m và gcd(a, m2)=1=gcd(m1, m2)=1 và sử dụng định lí phần dư Trung Hoa

- F(a, n, m2)≡aF(a, n-1, ϕ(m2)) (mod m2) tính được bằng cách gọi đệ quy tính F(a, n-1, ϕ(m2)) và dùng thuật toán luỹ thừa nhanh để tính trong O(log(F(a, n-1, ϕ(m2))))

- Để tính F(a, n, m1) thì nhận thấy là m1<=10^5 nên một số mũ tối đa của một số nguyên tố nào đó của m1 không vượt quá 20 (2^20>10^5) nên a^x%m1=0 nếu x>=20 Xét các trường hợp sau:

Nếu a=2 thì

n>4=>F(a, n, m1)=0 n<=4 có thể tính chính xác a⇈n Nếu a>=32 thì a⇈n>=20 vì n>1

Nếu n>2 thì a⇈n>=20 vì 3⇈3>=20

Trang 11

Nếu không thì n=2 có thể tính được a^a bằng thuật toán luỹ thừa nhanh.

- Sau khi tính được F(a, n, m1) và F(a, n, m2) sử dụng định lí đồng dư Trung Quốc

và tính F(a, n, m) Có thể sử dụng cách tính nêu trên hoặc áp dụng thẳng công thức tổng quát

Đánh giá độ phức tạp

Với mỗi hàm F(a, n, m) được gọi, tính mất O(log(a)) vì:

Tối đa 2 lần tính luỹ thừa nhanh m1 và m2 tính trong log(a) vì có thể phân tích ra thừa số nguyên tố các giá trị này trong O(log(a)) nếu chuẩn bị sẵn mảng số nguyên tố bé nhất là ước trong khi sàng nguyên tố tính hàm phi Euler

Thoạt nhìn, độ phức tạp thuật toán sẽ là O(n*log(a)) cho mỗi test vì hàm F(a, n, m)

có thể bị gọi tới n lần, tuy nhiên độ phức tạp thực tế là O(min(n, log(m))*log(a)) vì:

Hàm F(a, n, m) gọi hàm F(a, n-1, ϕ(m2)) mà m2<=m và ϕ(m2) là số chẵn nếu m2>3 nên từ lần đệ quy thứ 2, m2 chẵn hoặc m2<3 Nếu m2 là số chẵn thì ϕ(m2)<=m2/2 (dựa theo công thức nhân của Euler), nếu m2<3 thì m2=1 Do đó từ lần thứ 2 sau mỗi lần gọi hàm, m trong F(a, n, m) sẽ bị giảm đi ít nhất 2 lần, hay chỉ tốn tối đa log(m) lần gọi hàm cho đến khi gặp một trường hợp đặc biệt

Code, Test và Cảm nhận

https://drive.google.com/file/d/16qWLNDlcVQMnz-ue2ob76 hKwXEHK1a/view

Bài toán tháp luỹ thừa về mặt thuật toán thì thẳng thắn, đơn giản tuy nhiên lại yêu cầu có một số hiểu biết về tính toán đồng dư Việc đánh giá đúng độ phức tạp cho ta một kết quả hay nhưng đơn giản mà lại khó tìm thấy

Bài 2 DPEQN - Congruence Equation

Cho phương trình đồng dư:

Trong đó và là các hằng số nguyên dương cho trước là các ẩn Tìm một nghiệm của phương trình trên, hoặc thông báo phương trình vô nghiệm

Dữ liệu: Dòng đầu tiên ghi số bộ test, mỗi bộ test có dạng như sau:

Dòng 1:

Dòng 2: gồm số nguyên

Dòng 3:

Mỗi bộ test được phân cách bởi một dòng trắng ở đầu

Kết quả:

Với mỗi bộ test, nếu phương trình không có nghiệm, in ra dòng "NO" Trong trường hợp có nghiệm, in ra trên một dòng số nguyên (

) là một nghiệm tìm được

Ví dụ:

2

2

4 6

6 10

2

4 6

1 2 NO

Ngày đăng: 08/07/2019, 15:04

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w