Tải bản đầy đủ (.ppt) (42 trang)

Tài liệu tập huấn CNTT tháng 11 năm 2011

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 (722.47 KB, 42 trang )



M T S KI N TH C C B N V Ộ Ố Ế Ứ Ơ Ả Ề
M T S KI N TH C C B N V Ộ Ố Ế Ứ Ơ Ả Ề
S H C THU T TOÁNỐ Ọ Ậ
S H C THU T TOÁNỐ Ọ Ậ
GV – Lê Anh Phương.
GV – Lê Anh Phương.
- 1 -
Chuyên đêề:


N I DUNGỘ
N I DUNGỘ
I. Phép chia các số nguyên.
II. Số nguyên tố.
II.1. Kiểm tra tính nguyên tố của một số nguyên.
II.2. Liệt kê các số nguyên tố trong đoạn [1, N].
II.3. Phân tích một số thành tích của các thừa số
nguyên tố.
III. Ước số, bội số.
III.1. Số các ước số của một số.
III.2. Tổng các ước số của một số.
III.3. Ước số chung lớn nhất của hai số.
III.3.1. Thuật toán Euclid.
III.3.2. Thuật toán Euclid dạng đệ quy và sự mở
rộng.
III.4. Bội số chung nhỏ nhất của hai số.
IV. Bài tập áp dụng.
- 2 -



M C TIÊUỤ
M C TIÊUỤ

Nắm được các kiến thức cơ bản của số
học thuật toán trong nội dung trên.

Trọng tâm của chuyên đề là nắm được
các thuật toán cơ bản về số học thuật
toán và vận dụng được các thuật toán
đó trong giải các bài toán.
- 3 -


I. Phép chia các s nguyên. ố
I. Phép chia các s nguyên. ố
1. a chia hết cho b hay a là bội của b. Ký
hiệu: . Ta cũng nói: b chia hết a hay b
là ước của a. Ký hiệu: b|a. Ví dụ: 18 = 3.6


hay 3|18.
2. a không chia hết cho b. Ta viết : a = bq + r
với 0 < r < b. q thương gần đúng và r số dư
(0 < r < b).
Ví dụ:

Với a = 19, b = 3 ta có 19 = 3.6 + 1.

Với a = -25, b = 7, ta có -25 = 7.(-4) + 3.


Với a = 5, b = 11, ta có 5 = 11.0 + 5.
- 4 -
a bM
18 3M
ba


I. Phép chia các s nguyên. ố
I. Phép chia các s nguyên. ố
Tổng quát:
Khi chia một số nguyên a cho một số nguyên b
(b > 0) ta luôn có một số dư duy nhất r với 0


r < b (số dư là một trong các số từ 0 đến b-1).
Chúng ta cũng dùng hai số a DIV b, a MOD b
thay cho hai số q và r . b|a

a MOD b = 0.
Chú ý:
293 DIV 8 = 36 293 MOD 8 = 5
-293 DIV 8 = -37 -293 MOD 8 = 3
293 DIV -8 = -36 293 MOD -8 = 5
-293 DIV -8 = 37 -293 MOD -8 = 3
Và n chẳn

n MOD 2 = 0, n lẻ

n MOD 2 = 1.

- 5 -
a bM


M t s ki u s nguyên trong Pascalộ ố ể ố
M t s ki u s nguyên trong Pascalộ ố ể ố
Byte
Byte
0 255
Turbo
Turbo
Pascal
Pascal
+
+
Free
Free
Pascal
Pascal
Word
Word
0 65535
Integer
Integer
-32768 32767
Longint
Longint
-2147483648
2147483647
QWord

QWord
0
18446744073709551615
Free
Free
Pascal
Pascal
Int64
Int64
-9223372036854775808
9223372036854775807


Bài toán 1:
Bài toán 1:
Tìm v trí s N.ị ố
Tìm v trí s N.ị ố
Trên tờ giấy vở kẻ ô vuông (xem như một lưới ô vuông
rất lớn, các dòng, các cột được đánh số). Cu Tý viết
lần lượt các số nguyên dương như hình dưới:
4
4
3
3
16
16
15
15
14
14

13
13
2
2
9
9
10
10
11
11
12
12
1
1
8
8
7
7
6
6
5
5
0
0
1
1
2
2
3
3

4
4
0
0
1
1
2
2
3
3
4
4
5
5
6
6


Cho số nguyên dương n (1 ≤ n ≤ 10
9
) . Số n sẽ được
Cu Tý viết vào ô (cột, dòng) nào?


Tìm cách gi i.ả
Tìm cách gi i.ả
1. Hiểu bài toán.

Với n = 9. Tọa độ (2, 2).


Với n = 15. Tọa độ (4, 3).
2. Tìm thuật toán.
Ý tưởng thuật toán 1:
- dùng mãng hai chiều mô tả lưới ô vuông.
- lấp dần mãng với các số nguyên từ 1 đến n như yêu cầu của bài
toán.
- chỉ ra ô ghi số n.
Rõ ràng thuật toán này không cần suy nghĩ gì nhiều,
làm như yêu cầu của bài toán. Tuy nhiên có 2
nhược điểm:

không đủ bộ nhớ để mô tả lưới ô vuông.

mất nhiều thời gian cho việc lấp dần mãng.
- 8 -
a bM


Tìm cách gi i.ả
Tìm cách gi i.ả
Ý tưởng thuật toán 2:
Chúng ta thử tìm ra những tính chất, đặc trưng
có trong nội dung bài toán.
- Một dòng ghi 4 số, vậy n số thì sẽ ghi trên
mấy dòng? (y = (n-1) div 4).
- Để chỉ ra tọa độ cột, chúng ta cần để ý:

Dòng 1 viết từ trái sang phải, dòng 2 từ phải sang trái,
dòng 3 từ trái sang phải, , hay:


Dòng chẵn viết từ trái sang phải,

Dòng lẻ viết từ phải sang trái.

Sau mỗi dòng viết dịch sang phải 1 ô, có bao nhiêu dòng
thì dịch bấy nhiêu ô.
Từ đó:

Nếu y chẵn thì x = y + (n – 1) mod 4.

Nếu y lẻ thì x = y + (3 – (n – 1) mod 4).
- Kiểm tra lại các ví dụ trong phần hiểu bài.
- 9 -
a bM


Bài toán 2:
Bài toán 2:
Dãy con dài nh t có t ng chia h t cho 3.ấ ổ ế
Dãy con dài nh t có t ng chia h t cho 3.ấ ổ ế
Cho một dãy gồm n số nguyên dương {a
i
}: a
1
,
a
2
, , a
n
.

(1 ≤ n ≤ 10
9
, 0 < a
i
≤ 10
9
, i = 1, 2, 3, , n)
Một dãy con của dãy {a
i
} là dãy thu được khi
bỏ đi một số số hạng của nó và giữ nguyên
vị trí của các số hạng còn lại.
Ví dụ: n = 5; a
i
= 2, 5, 6, 8, 1. Thì dãy: 2, 6, 1 hay
dãy: 6, là những dãy con của dãy đã cho.
Hãy tìm số số hạng L của dãy con dài nhất sao
cho tổng các số hạng của dãy con đó chia
hết cho 3.
Ví dụ: n = 3; a
i
= 6, 2, 3. Dãy con dài nhất có tổng các
số hạng chia hết 3 là dãy: 6 3. Độ dài lớn nhất L = 2.
Giới hạn: Bộ nhớ 1MB. Thời gian 1s/test.
- 10 -
a bM


Tìm cách gi i.ả
Tìm cách gi i.ả

1. Hiểu bài toán.
2. Tìm thuật toán.
Ý tưởng thuật toán 1:

Liệt kê tất cả các dãy con của {a
i
}, có 2
n
dãy
con.

Với mỗi dãy con tìm được, kiểm tra tổng các
số hạng chia hết cho 3, nếu chia hết thì lưu
lại độ dài.

Ghi ra độ dài lớn nhất.
Thuật toán này không thể giải quyết
bài toán, vi phạm cả bộ nhớ lẫn thời
gian.
- 11 -
a bM


Tìm cách gi i.ả
Tìm cách gi i.ả
Ý tưởng thuật toán 2:
Dựa vào tính chất của phép chia dư, ta có thuật toán
tốt hơn.

Một số khi đem chia cho 3 thì số dư chỉ có thể là 0, 1

hoặc 2.

Tổng các số hạng của dãy {a
i
} khi chia cho 3 cũng
như vậy.
Gọi r = (a
1
+ a
2
+ + a
n
) mod 3
= (a
1
mod 3 + a
2
mod 3 + + a
n
mod 3) mod 3.
Thì r chỉ nhận các giá trị 0, 1 hoặc 2. Khi đó:

Nếu r = 0 thì L = n.

Nếu r = 1 thì L = n – 1 (bỏ đi 1 số hạng chia cho 3 dư 1)

Nếu r = 2 thì

Hoặc L = n - 1 (bỏ đi 1 số hạng chia cho 3 dư 2)


Hoặc L = n – 2 (bỏ đi 2 số hạng chia cho 3 dư 1)
- 12 -
a bM


Tìm cách gi i.ả
Tìm cách gi i.ả
Test bài học sinh.

Trường hợp biên.

N = 1, a
1
= 3. L = 1.

N = 1, a
1
= 1 hoặc a
1
= 2. L = 0.

N = 1, a
1
= 20000000001. L = 1.

N = 1, a
1
= 20000000002. L = 0.

Trường hợp còn lại.


Dữ liệu nhỏ.

N = 3, a
i
= 3, 6, 9 hoặc a
i
= 3, 4, 5. L = N = 3.

N = 3, a
i
= 3, 4, 6 hoặc a
i
= 3, 6, 8. L = N – 1 = 2.

N = 3, a
i
= 3, 4, 7. L = N – 2 = 1.

Dữ liệu lớn.

N nhỏ, các a
i
nhỏ.

N lớn, các a
i
nhỏ.

N lớn, các a

i
lớn.
- 13 -
a bM


II. S nguyên t . ố ố
II. S nguyên t . ố ố
Một số tự nhiên p (p > 0) là số nguyên tố
nếu p có đúng hai ước là 1 và p.
Ví dụ: các số nguyên tố: 2, 3, 5, 7, 11, 13,
17, 19, 23,
Mở rộng:
Một số nguyên n là một số nguyên tố:
i. |n| ≥ 2,
ii. n chỉ có các ước -1, 1, -n, n.
Do: n nguyên tố

-n nguyên tố, nên ta chỉ
quan tâm n nguyên dương.
- 14 -
a bM


II. S nguyên t . ố ố
II. S nguyên t . ố ố
II.1. Kiểm tra tính nguyên tố của một số
nguyên.
N nguyên tố khi n không có ước nào trong
khoảng từ 2 đến

function IsPrime(n : longint) : boolean;
var k : longint;
begin
if n = 1 then exit(false);
for k := 2 to trunc(sqrt(n)) do
if n mod k = 0 then exit(false);
exit(true);
end;
- 15 -
a bM
n


II. S nguyên t . ố ố
II. S nguyên t . ố ố
Hàm IsPrime(n) sau kiểm tra tính nguyên tố của số
n bằng cách kiểm tra n có chia hết cho 2, 3 và
các số có dạng 6k
±
1 trong đoạn [5, ].
function IsPrime(n : longint) : boolean;
var k, sqrt_n : longint;
begin
if (n = 2) or (n = 3) then exit(true);
if (n = 1) or (n mod 2 = 0) or (n mod 3 = 0) then exit(false);
sqrt_n := trunc(sqrt(n));
k := -1;
repeat
k := k + 6;
if (n mod k = 0) or (n mod (k + 2) = 0) then break;

until k > sqrt_n;
exit(k > sqrt_n);
end;
- 16 -
a bM
n




PHIẾU HỌC TẬP SỐ 1
PHIẾU HỌC TẬP SỐ 1
Thời gian thực hiện: 20 phút.
Thời gian thực hiện: 20 phút.
Mục tiêu:
Mục tiêu:
- sử dụng phép chia trong các bài toán
- sử dụng phép chia trong các bài toán
- kiểm tra tính nguyên tố của một số nguyên dương và ứng dụng.
- kiểm tra tính nguyên tố của một số nguyên dương và ứng dụng.
- xây dựng các chương trình hay chương trình con thực hiện
- xây dựng các chương trình hay chương trình con thực hiện
thuật toán.
thuật toán.







THẢO LUẬN NHÓM SỐ 1
THẢO LUẬN NHÓM SỐ 1
Thời gian thực hiện: 15 phút
Thời gian thực hiện: 15 phút
.
.
Mục tiêu cần đạt:
Mục tiêu cần đạt:
- thảo luận và tìm ra thuật toán cho các bài toán từ
- thảo luận và tìm ra thuật toán cho các bài toán từ
phiếu học tập số 1.
phiếu học tập số 1.
- cả nhóm cùng thiết kế và mô tả lại các thuật toán.
- cả nhóm cùng thiết kế và mô tả lại các thuật toán.


II. S nguyên t . ố ố
II. S nguyên t . ố ố
II.2. Liệt kê các số nguyên tố trong đoạn
[1, N].
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.
procedure Generate(n : longint);
var m : longint;
begin
for m := 2 to n do
if IsPrime(m) then writeln(m);
end;
- 19 -
a bM



II. S nguyên t . ố ố
II. S nguyên t . ố ố
Sử dụng sàng số nguyên tố, như sàng
Eratosthenes.
{$M 1100000}
procedure eratosthenes(n : longint);
const max = 1000000;
var i, j : longint;
prime : array[1 max] of byte;
begin
fillchar(prime, sizeof(prime), 0);
for i := 2 to trunc(sqrt(n)) do
if prime[i] = 0 then begin
j := i * i;
while j <= n do begin
prime[j] := 1;
j := j + i;
end;
end;
for i := 2 to n do
if prime[i] = 0 then writeln(i);
end;
- 20 -
a bM


II. S nguyên t . ố ố
II. S nguyên t . ố ố

II.3. Phân tích một số thành tích của các thừa số nguyên tố.
Phép thử chia:
{$M 1100000}
procedure factor(n : longint);
const max = 1000000;
var k, m, p : longint; prime, power : array[1 max] of longint;
begin
k := 2; m := 0;
while (k*k <= n) do begin
if (n mod k = 0) then begin
p := 0;
while (n mod k = 0) do begin
n := n div k; inc(p);
end;
inc(m); prime[m] := k; power[m] := p;
end;
inc(k);
end;
if (n > 1) then begin inc(m); prime[m] := n; power[m] := 1; end;
end;
- 21 -
a bM
α α α α
=
1 2 3 m
1 2 3 m
N p p p p


II. S nguyên t . ố ố

II. S nguyên t . ố ố
Đã có mãng prime lưu các số nguyên tố đầu tiên bé hơn
hay bằng n, prime[i] là số nguyên tố thứ i trong các
số 2, 3, 5,
procedure factor(n : longint);
const max = 1000000;
var i, p : longint; power : array[1 max] of longint;
begin
i := 1;
while n > 1 do begin
if n mod prime[i] = 0 then begin
p := 0;
while n mod prime[i] = 0 do begin
inc(p); n := n div prime[i];
end;
power[i] := p;
end;
i := i + 1;
end;
for p := 1 to i - 1 do if power[p] <> 0 then writeln(prime[p], #32, power[p]);
end;
- 22 -
a bM




PHIẾU HỌC TẬP SỐ 2
PHIẾU HỌC TẬP SỐ 2
Thời gian thực hiện: 20 phút.

Thời gian thực hiện: 20 phút.
Mục tiêu:
Mục tiêu:
- sử dụng sàng nguyên tố như sàng Eratosthenes.
- sử dụng sàng nguyên tố như sàng Eratosthenes.
- phân tích một số thành tích của các thừa số nguyên tố và ứng
- phân tích một số thành tích của các thừa số nguyên tố và ứng
dụng.
dụng.
- xây dựng các chương trình hay chương trình con thực hiện
- xây dựng các chương trình hay chương trình con thực hiện
thuật toán.
thuật toán.






THẢO LUẬN NHÓM SỐ 2
THẢO LUẬN NHÓM SỐ 2
Thời gian thực hiện: 15 phút
Thời gian thực hiện: 15 phút
.
.
Mục tiêu cần đạt:
Mục tiêu cần đạt:
- thảo luận và tìm ra thuật toán cho các bài toán từ
- thảo luận và tìm ra thuật toán cho các bài toán từ
phiếu học tập số 2.

phiếu học tập số 2.
- cả nhóm cùng thiết kế và mô tả lại các thuật toán.
- cả nhóm cùng thiết kế và mô tả lại các thuật toán.


III. c s , b i s . Ướ ố ộ ố
III. c s , b i s . Ướ ố ộ ố
III.1. Số các ước số của một số.
Giả sử N được phân tích thành các thừa số nguyên
tố:
Số các ước của n là: (
α
1
+ 1)(
α
2
+ 1)(
α
3
+ 1) (
α
m

+ 1).
Ví dụ:

N = 100 = 2
2
x 5
2

, vậy số ước của N là (2 + 1)(2 + 1) =
9 ước số, đó là các số: 1, 2, 4, 5, 10, 20, 25, 50, 100.

N = 24 = 2
3
x 3, số ước của N là (3 + 1)(1 + 1) = 8 ước
số, đó là các số: 1, 2, 3, 4, 6, 8, 12, 24.
- 25 -
a bM
α α α α
=
1 2 3 m
1 2 3 m
N p p p p

×