Tìm cách gi i ả

Một phần của tài liệu Tài liệu tập huấn CNTT tháng 11 năm 2011 (Trang 29 - 35)

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. (adsbygoogle = window.adsbygoogle || []).push({});

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:

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Tài liệu tập huấn CNTT tháng 11 năm 2011 (Trang 29 - 35)