Phân tích một số thành tích của các thừa số nguyên tố.. 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ơ
Trang 2I 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.
Trang 3 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.
Trang 5I 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
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
Trang 6Byte 0 255 Turbo
Pascal +
Free Pascal
Trang 7Trê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:
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?
Trang 8Ý 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.
Trang 9Tì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 ô.
Trang 10Bà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; ai = 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; ai = 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.
Trang 11Tì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:
con.
số hạng chia hết cho 3, nếu chia hết thì lưu lại độ dài.
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 .
Trang 12Tì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
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)
Trang 14Do: n nguyên tố ⇔ -n nguyên tố, nên ta chỉ
quan tâm n nguyên dương.
Trang 16II 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;
Trang 17Thời gian thực hiện: 20 phút.
Mục tiêu:
- 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.
- xây dựng các chương trình hay chương trình con thực hiện thuật toán.
Trang 18Thời gian thực hiện: 15 phút
Trang 19II 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);
Trang 22II 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
while n mod prime[i] = 0 do begin
inc(p); n := n div prime[i];
Trang 23Thời gian thực hiện: 20 phút.
Mục tiêu:
- 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 dụng.
- xây dựng các chương trình hay chương trình con thực hiện thuật toán.
Trang 24Thời gian thực hiện: 15 phút
Trang 25III Ướ ố ộ ố 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
Trang 26III Ướ ố ộ ố c s , b i s
III Ướ ố ộ ố c s , b i s
III.2 Tổng 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
Trang 27III Ướ ố ộ ố c s , b i s
III Ướ ố ộ ố c s , b i s
III.3 Ước số chung lớn nhất (UCLN) của
hai số
Cho hai số nguyên dương a và b Ước
chung lớn nhất của a và b, ký hiệu UCLN(a, b) hay (a, b) Một số d là ước chung của a và b khi và chỉ khi d là ước của UCLN(a, b): d|a và d|b ⇔ d|
UCLN(a, b).
Hai số a và b gọi là nguyên tố cùng nhau
khi và chỉ khi UCLN(a, b) =1
Trang 28Bài toán 3: Quà sinh nh t Quà sinh nh t ậ ậ
Còn b ngày nửa là đến sinh nhật của Tý Bà nội
bảo từ hôm nay bà sẽ để dành tiền mua quà cho Tý.
Ngày đầu bà để dành a đồng, ngày thứ hai 2*a
đồng, ngày thứ ba 3*a đồng, , ngày b là b*a đồng.
Thêm vào đó, ngày nào mà số tiền để dành cho
Tý chia hết cho b thì Tý sẽ được bà cho một
Trang 29Tìm cách gi i ả
Tìm cách gi i ả
Bài toán yêu cầu: có bao nhiêu số trong
các số a, 2a, 3a, , ba; chia hết cho b.
2a, 3a, , ba Số nào chia hết cho b thì đếm.
Count := 0;
For i := 1 to b do
if (i*a) mod b = 0 then count := count + 1;
Trang 30Tìm cách gi i ả
Tìm cách gi i ả
Ý tưởng thuật toán 2:
Gọi d là UCLN(a, b) Khi đó a = d*r và b = d*s, r và
s nguyên tố cùng nhau.
Chia tất cả các số a, 2a, 3a, , ba cho b ta có:
Bởi r, s nguyên tố cùng nhau nên trong các phân
số trên các tử số r, 2r, 3r, , (ds – 1)r, (ds)r chia hết cho s khi các hệ số của r: 1, 2, 3, ,
ds – 1, ds chia hết cho s Rõ ràng sẽ có d số như vậy đó là các số: s, 2s, 3s, , ds.
Bài toán chỉ cần tìm ước chung lớn nhất d của a
Trang 31III Ướ ố ộ ố c s , b i s
III Ướ ố ộ ố c s , b i s
Tìm ước chung lớn nhất của hai số nguyên
dương a, b:
Có thể dùng phương pháp sau: Phân tích
a và b ra thừa số nguyên tố, ước chung lớn nhất của a và b là tích của các thừa
số nguyên tố chung với số mũ nhỏ nhất
Ví dụ: a = 126 = 2.3 2 7, b = 735 = 3.5.7 2
khi đó UCLN(a, b) = 3.7 = 21
Trang 32III Ướ ố ộ ố c s , b i s
III Ướ ố ộ ố c s , b i s
Tìm ước chung lớn nhất của hai số nguyên dương a, b:
III.3.1 Thuật toán Euclid
Cho hai số nguyên a, b và giả sử a > b.
Trang 34III Ướ ố ộ ố c s , b i s
III Ướ ố ộ ố c s , b i s
Tìm ước chung lớn nhất của hai số nguyên dương a, b:
III.3.1 Thuật toán Euclid
Thuật toán Euclid dựa vào hai mệnh đề sau:
1 a = ba ⇒ UCLN(a, b) = b.
2 a = bq + r (r ≠ 0) ⇒ UCLN(a, b) = UCLN(b, r).
Hay UCLN(a, b) = UCLN(b, a MOD b)
function gcd(a, b : longint) : longint;
Trang 35Thời gian thực hiện: 20 phút.
Mục tiêu:
- sử dụng tính chất của ước số, bội số.
- xây dựng các chương trình hay chương trình con thực hiện thuật toán.
Trang 36Thời gian thực hiện: 15 phút
Trang 37III Ướ ố ộ ố c s , b i s
III Ướ ố ộ ố c s , b i s
Tìm ước chung lớn nhất của hai số nguyên dương a,
b:
III.3.2 Thuật toán Euclid dạng đệ quy và sự mở rộng
Thuật toán Euclid tìm UCLN của a và b, viết
Trang 38nguyên x, y sao cho ax + by = d (*)
USCLN d của a và b, đồng thời tìm được
cả hai số nguyên x, y trong công thức (*)
đạt bằng đệ quy như sau:
Trang 39III Ướ ố ộ ố c s , b i s
III Ướ ố ộ ố c s , b i s
Tìm ước chung lớn nhất của hai số nguyên dương a, b:
III.3.2 Thuật toán Euclid dạng đệ quy và sự mở rộng
begin
if (a<b) then ee(b, a, x, y)
else if (b=0) then begin
x := 1; y := 0;
ee(b, a mod b, x2, y2);
x := y2; y := x2 - (a div b) * y2;
Mặt khác: r = a – bq Với r = a mod b và q = a div b
b(x2 – qy2) = d.
Vậy: x = y2, y = x2 – qy2
Trang 40III Ướ ố ộ ố c s , b i s
III Ướ ố ộ ố c s , b i s
III.4 Bội số chung nhỏ nhất của hai số.
Bội chung nhỏ nhất của a và b được ký
hiệu là BCNN(a, b) hay [a, b] Một số m
là bội chung của a và b khi và chỉ khi m
là bội của BCNN(a, b).
Để tìm bội chung nhỏ nhất của a và b ta
dựa vào công thức sau:
Từ đó BCNN(a, b) = ab khi UCLN(a, b) = 1.
BCNN(a, b)
UCLN(a, b)
Trang 41Thời gian thực hiện: 20 phút.
Mục tiêu:
- phân tích nhận dạng bài toán số học.
- thuật toán tìm ước chung lớn nhất và ứng dụng.
- thiết kế và mô tả, nêu ý tưởng của thuật toán.
Trang 42CHÂN THÀNH CÁM ƠN