viết chương trình kiểm tra số nguyên tố python nha
Bài tập này sẽ giúp chúng ta ôn lại kiến thức về vòng lặp, câu lệnh điều kiện và các phép toán cơ bản trong lập trình. Chúng ta sẽ đi từng bước một, giống như cách chúng ta giải một bài toán trên giấy vậy.
Bước 1: Hiểu rõ khái niệm số nguyên tố
Trước tiên, các em cần nhớ lại định nghĩa số nguyên tố là gì.
Một số nguyên dương được gọi là số nguyên tố nếu nó chỉ có hai ước số dương là 1 và chính nó.
Ví dụ: 2, 3, 5, 7, 11, 13 là các số nguyên tố.
Số 1 không phải là số nguyên tố vì nó chỉ có một ước số dương là 1.
Số 4 không phải là số nguyên tố vì nó có các ước số là 1, 2, 4.
Bước 2: Lên ý tưởng thuật toán
Để kiểm tra một số \(n\) có phải là số nguyên tố hay không, chúng ta cần làm gì?
Chúng ta sẽ thử chia số \(n\) cho tất cả các số nguyên từ 2 cho đến \(n-1\).
Nếu trong quá trình chia này, \(n\) chia hết cho bất kỳ số nào trong khoảng đó, thì \(n\) không phải là số nguyên tố.
Nếu \(n\) không chia hết cho bất kỳ số nào trong khoảng đó, thì \(n\) là số nguyên tố.
Tuy nhiên, chúng ta có thể tối ưu thuật toán này một chút. Chúng ta chỉ cần kiểm tra các số chia từ 2 cho đến căn bậc hai của \(n\). Nếu \(n\) có ước số \(d\) lớn hơn \(\sqrt{n}\), thì \(n\) cũng sẽ có một ước số khác là \(n/d\) nhỏ hơn \(\sqrt{n}\).
Do đó, việc kiểm tra đến \(\sqrt{n}\) là đủ.
Trong lập trình, chúng ta có thể sử dụng vòng lặp để thực hiện việc này.
Bước 3: Viết mã Python
Bây giờ, chúng ta sẽ bắt đầu viết chương trình.
Đầu tiên, chúng ta cần yêu cầu người dùng nhập vào một số nguyên.
python
so_nguyen = int(input(“Nhập một số nguyên dương: “))
Trong câu lệnh trên:
– \(input(“Nhập một số nguyên dương: “)\) sẽ hiển thị dòng chữ “Nhập một số nguyên dương: ” lên màn hình và chờ người dùng gõ vào một giá trị.
– \(int(…)\) sẽ chuyển đổi giá trị mà người dùng gõ vào (đang ở dạng chuỗi ký tự) thành một số nguyên.
– Chúng ta gán giá trị số nguyên này cho biến \(so_nguyen\).
Tiếp theo, chúng ta cần xử lý các trường hợp đặc biệt:
Nếu số nhập vào nhỏ hơn hoặc bằng 1, nó không phải là số nguyên tố.
python
if so_nguyen <= 1:
print(so_nguyen, "không phải là số nguyên tố.")
Bây giờ, chúng ta sẽ đi vào phần kiểm tra chính cho các số lớn hơn 1. Chúng ta sẽ sử dụng một biến cờ hiệu (flag) để đánh dấu xem số đó có phải là số nguyên tố hay không. Ban đầu, chúng ta giả định nó là số nguyên tố.
python
else:
la_so_nguyen_to = True # Giả sử ban đầu là số nguyên tố
Chúng ta sẽ sử dụng vòng lặp \(for\) để duyệt qua các số từ 2 cho đến căn bậc hai của \(so_nguyen\).
Trong Python, chúng ta có thể dùng \(math.sqrt()\) để tính căn bậc hai, nhưng để đơn giản và không vượt lớp, chúng ta sẽ chỉ lặp đến \(so_nguyen // 2\) hoặc thậm chí \(so_nguyen - 1\) là đủ để hiểu thuật toán cơ bản. Tuy nhiên, để tối ưu hơn một chút, chúng ta có thể lặp đến \(int(so_nguyen**0.5) + 1\). Với kiến thức lớp 8, việc lặp đến \(so_nguyen - 1\) hoặc \(so_nguyen // 2\) là hoàn toàn chấp nhận được để minh họa.
Ở đây, cô sẽ dùng cách lặp đến \(so_nguyen // 2\) vì nó cũng khá hiệu quả và dễ hiểu.
python
# Duyệt từ 2 đến nửa của số đó
for i in range(2, so_nguyen // 2 + 1):
if so_nguyen % i == 0: # Nếu số đó chia hết cho i
la_so_nguyen_to = False # Đặt cờ hiệu là False, không phải số nguyên tố
break # Thoát khỏi vòng lặp vì đã tìm thấy ước số
Giải thích vòng lặp \(for i in range(2, so_nguyen // 2 + 1)\):
- \(range(bắt đầu, kết thúc)\) sẽ tạo ra một dãy số bắt đầu từ \(bắt đầu\) và kết thúc trước \(kết thúc\).
- Chúng ta bắt đầu từ 2 vì 1 luôn là ước của mọi số.
- Chúng ta kết thúc ở \(so_nguyen // 2 + 1\). Dấu \(//\) là phép chia lấy phần nguyên. Ví dụ, nếu \(so_nguyen\) là 10, \(so_nguyen // 2\) là 5. \(range(2, 5 + 1)\) sẽ cho các số 2, 3, 4, 5. Nếu \(so_nguyen\) là 7, \(so_nguyen // 2\) là 3. \(range(2, 3 + 1)\) sẽ cho các số 2, 3.
- Nếu \(so_nguyen % i == 0\) là đúng, có nghĩa là \(so_nguyen\) chia hết cho \(i\) (phép \(%\) là phép chia lấy phần dư).
- Nếu tìm thấy một ước số, chúng ta đặt \(la_so_nguyen_to\) thành \(False\) và dùng \(break\) để thoát ngay khỏi vòng lặp, vì chúng ta đã biết chắc chắn nó không phải là số nguyên tố.
Cuối cùng, chúng ta sẽ kiểm tra giá trị của biến \(la_so_nguyen_to\) để đưa ra kết quả.
python
if la_so_nguyen_to:
print(so_nguyen, "là số nguyên tố.")
else:
print(so_nguyen, "không phải là số nguyên tố.")
Bước 4: Ghép các phần lại và chạy thử
Bây giờ, chúng ta sẽ ghép tất cả các phần lại để tạo thành chương trình hoàn chỉnh.
python
# Yêu cầu người dùng nhập vào một số nguyên
so_nguyen = int(input(“Nhập một số nguyên dương: “))
# Kiểm tra các trường hợp đặc biệt
if so_nguyen <= 1:
print(so_nguyen, "không phải là số nguyên tố.")
else:
# Giả sử ban đầu số đó là số nguyên tố
la_so_nguyen_to = True
# Duyệt từ 2 đến nửa của số đó để tìm ước số
for i in range(2, so_nguyen // 2 + 1):
# Nếu tìm thấy ước số
if so_nguyen % i == 0:
la_so_nguyen_to = False # Đặt cờ hiệu là False
break # Thoát khỏi vòng lặp
# In kết quả dựa trên giá trị của cờ hiệu
if la_so_nguyen_to:
print(so_nguyen, "là số nguyên tố.")
else:
print(so_nguyen, "không phải là số nguyên tố.")
Bây giờ, các em hãy thử chạy chương trình này với các giá trị khác nhau:
- Nhập 7: Chương trình sẽ in ra "7 là số nguyên tố."
- Nhập 10: Chương trình sẽ in ra "10 không phải là số nguyên tố."
- Nhập 1: Chương trình sẽ in ra "1 không phải là số nguyên tố."
- Nhập 2: Chương trình sẽ in ra "2 là số nguyên tố." (Vòng lặp \(range(2, 2 // 2 + 1)\) tức là \(range(2, 2)\) sẽ không chạy, nên \(la_so_nguyen_to\) vẫn là \(True\)).
Mở rộng (dành cho các bạn ham học hỏi):
Như cô đã nói ở Bước 2, chúng ta có thể tối ưu hơn bằng cách chỉ kiểm tra đến căn bậc hai của số đó. Để làm được điều này, chúng ta cần sử dụng thư viện \(math\).
python
import math # Import thư viện math
# Yêu cầu người dùng nhập vào một số nguyên
so_nguyen = int(input(“Nhập một số nguyên dương: “))
# Kiểm tra các trường hợp đặc biệt
if so_nguyen <= 1:
print(so_nguyen, "không phải là số nguyên tố.")
else:
# Giả sử ban đầu số đó là số nguyên tố
la_so_nguyen_to = True
# Duyệt từ 2 đến căn bậc hai của số đó
# math.sqrt(so_nguyen) trả về số thực, nên ta chuyển sang số nguyên bằng int()
# Cộng 1 để bao gồm cả giá trị căn bậc hai nếu nó là số nguyên
for i in range(2, int(math.sqrt(so_nguyen)) + 1):
# Nếu tìm thấy ước số
if so_nguyen % i == 0:
la_so_nguyen_to = False # Đặt cờ hiệu là False
break # Thoát khỏi vòng lặp
# In kết quả dựa trên giá trị của cờ hiệu
if la_so_nguyen_to:
print(so_nguyen, "là số nguyên tố.")
else:
print(so_nguyen, "không phải là số nguyên tố.")
Phiên bản này hiệu quả hơn khi kiểm tra với các số rất lớn. Tuy nhiên, với chương trình học lớp 8, phiên bản đầu tiên đã đủ để các em nắm vững kiến thức.
Cô hy vọng qua bài tập này, các em đã hiểu rõ hơn về cách xây dựng một chương trình kiểm tra số nguyên tố. Nếu có bất kỳ câu hỏi nào, đừng ngần ngại hỏi cô nhé! Chúc các em học tốt!
def kt ():
if n < 2:
return(“NO”)
for i in range (2,int(n**0.5)+1):
if n % i == 0:
return(“NO”)
return(“YES”)
n = int(input())
print(kt())
def prime(n):
ok = None
if n < 2 : ok = False
else : ok = True
for i in range(2,n):
if n % i == 0 :
ok = False
break
print(ok)
return
n=int(input())
prime(n)