btvn.vn
Tìm kiếm Đăng nhập

In n số nguyên tố đầu tiên bằng hai hàm

Lưu trên thiết bị này
Kĩ thuật lập trình — CS · Chọn bài khác

Hai hàm có hai trách nhiệm

Bài vận dụng thứ nhất yêu cầu in **n số nguyên tố đầu tiên**, không phải mọi số nguyên tố nhỏ hơn n. Hàm `la_nguyen_to(x)` trả đúng/sai cho một số; hàm `n_so_nguyen_to_dau(n)` thử các số từ 2 và gom đủ n số. `1` không là số nguyên tố. Muốn kiểm x, chỉ cần thử ước đến căn bậc hai của x: nếu x có ước lớn hơn căn thì ước đi cặp với nó nhỏ hơn căn. SGV minh họa vòng lặp vô hạn có điểm dừng sau khi in số thứ n; ví dụ dưới dùng `while len(ket_qua) < n` nên cả `n=0` cũng dừng ngay.

Kiểm một số, rồi tạo đủ số lượng

```python from math import isqrt def la_nguyen_to(x): if x < 2: return False for uoc in range(2, isqrt(x) + 1): if x % uoc == 0: return False return True def n_so_nguyen_to_dau(n): if n < 0: raise ValueError("n phải không âm") ket_qua = [] x = 2 while len(ket_qua) < n: if la_nguyen_to(x): ket_qua.append(x) x += 1 return ket_qua print(*n_so_nguyen_to_dau(5)) ``` Chương trình in `2 3 5 7 11`. Hàm trả dãy rỗng khi `n=0`; `print(*[])` chỉ in một dòng trống. Nếu bài giao n là số tự nhiên dương, có thể yêu cầu n≥1 ở đầu vào; xử lí 0 ở đây giúp hàm không bị chạy mãi khi dữ liệu ngoài dự kiến.

Bài luyện

Năm số nguyên tố đầu tiên là dãy nào?
Chọn một đáp án

Bài luyện

Vì sao chỉ cần thử ước tới `isqrt(x)`?
Chọn một đáp án

Bài luyện

`n_so_nguyen_to_dau(0)` trả gì?
Chọn một đáp án

Đang học