Ví dụ tổng hợp - số nguyên tố và ước chung
Bài 6/6 · khoảng 8 phút đọc
Hãy kết hợp hàm (Chương 4) với vòng lặp (chương này) để viết hai hàm toán học quen thuộc.
Kiểm tra số nguyên tố
Số nguyên tố là số lớn hơn 1 chỉ chia hết cho 1 và chính nó.
def la_nguyen_to(n): if n < 2: return False i = 2 while i * i <= n: if n % i == 0: return False i = i + 1 return True print(la_nguyen_to(7))print(la_nguyen_to(12))print(la_nguyen_to(97))Ý tưởng: thử chia n cho 2, 3, 4, …; nếu tìm được số chia hết thì n không phải số nguyên tố. Chỉ cần thử đến khi i * i vượt quá n.
Ước chung lớn nhất (thuật toán Euclid)
def ucln(a, b): while b != 0: a, b = b, a % b return a print(ucln(48, 18))print(ucln(17, 5))Thuật toán nhiều ngàn năm tuổi này lặp lại: thay (a, b) bằng (b, a % b) cho đến khi b bằng 0; lúc đó a là ước chung lớn nhất.
Dùng hàm để chia bài toán
def la_nguyen_to(n): if n < 2: return False for i in range(2, n): if n % i == 0: return False return True def liet_ke_nguyen_to(gioi_han): for n in range(2, gioi_han + 1): if la_nguyen_to(n): print(n, end=" ") liet_ke_nguyen_to(30)Ghi nhớ: chia bài toán thành các hàm nhỏ, mỗi hàm làm một việc rõ ràng rồi ghép lại.
Vì sao `la_nguyen_to(1)` trả về `False`?
Vì theo định nghĩa số nguyên tố phải lớn hơn 1.