III. Ướ ốc s, bi s.
Tì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. Ý tưởng thuật toán 1: với tất cả các số a,
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;
Tì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
2 3 ( 1) ( ), , ,..., , . , , ,..., , .
r r r ds r ds r
s s s s s
III. Ướ ố ộ ố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.32.7, b = 735 = 3.5.72
III. Ướ ố ộ ố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.
Nếu b là ước của a thì UCLN(a, b) = b.
Ví dụ:
Ví dụ: 80 = 16.5, do đó: UCLN(80, 16) = 16.80 = 16.5, do đó: UCLN(80, 16) = 16.
Nếu b không là ước của a.
Ví dụ:
Ví dụ: a = 702, b = 306. a = 702, b = 306.
702 = 306.2 + 90
702 = 306.2 + 90 ⇔⇔ UCLN(702, 306) UCLN(702, 306) = UCLN(306, = UCLN(306,
90)
90)
306 = 90.3 + 36
306 = 90.3 + 36 ⇔⇔ UCLN(306, 90) UCLN(306, 90) = UCLN(90, 36)= UCLN(90, 36)
90 = 36.2 + 18
90 = 36.2 + 18 ⇔⇔ UCLN(90, 36) UCLN(90, 36) = UCLN(36, 18)= UCLN(36, 18)
36 = 18.2
III. Ướ ố ộ ố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.
Trong thực hành người ta đặt các phép tính như sau:
III. Ướ ố ộ ố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; var tmp : longint; begin while b > 0 do begin a := a mod b; tmp := a; a := b; b := tmp; end; exit(a); end;
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: