Kiểm tra số nguyên tố
🔢 Kiểm tra Số Nguyên tố
Mô phỏng thuật toán kiểm tra số nguyên tố với nhật ký chi tiết
📚 Định nghĩa Số Nguyên tố
Số nguyên tố là số tự nhiên lớn hơn 1, chỉ có đúng 2 ước số là 1 và chính nó.
🔍 Các tính chất:
- Số 2: Là số nguyên tố nhỏ nhất và duy nhất chẵn
- Số lẻ: Tất cả số nguyên tố khác đều là số lẻ
- Ước số: Chỉ có đúng 2 ước: 1 và chính nó
- Vô hạn: Có vô số số nguyên tố (chứng minh của Euclid)
💡 Phân biệt:
Loại số
Định nghĩa
Ví dụ
Số nguyên tố
Có đúng 2 ước số
2, 3, 5, 7, 11, 13...
Hợp số
Có nhiều hơn 2 ước số
4, 6, 8, 9, 10, 12...
Số đặc biệt
Không thuộc 2 loại trên
0, 1
⚙️ Thuật toán Kiểm tra Số Nguyên tố
🎯 Thuật toán Cơ bản:
- Nếu n ≤ 1: Không phải số nguyên tố
- Nếu n = 2: Là số nguyên tố
- Nếu n chẵn: Không phải số nguyên tố
- Kiểm tra chia hết cho các số lẻ từ 3 đến √n
- Nếu không chia hết cho số nào: Là số nguyên tố
🚀 Tối ưu hóa √n:
Tại sao chỉ cần kiểm tra đến √n?
Nếu n có ước a > √n, thì phải tồn tại ước b = n/a < √n
Ví dụ: n = 36, √36 = 6
- Ước 9 > 6 ⟹ tồn tại ước 4 = 36/9 < 6
- Ước 12 > 6 ⟹ tồn tại ước 3 = 36/12 < 6
📊 Độ phức tạp:
Thuật toán cơ bản: O(n)
Thuật toán tối ưu: O(√n)
Cải tiến thêm: Chỉ kiểm tra số lẻ ⟹ O(√n/2)
🐍 Code Python
📝 Phiên bản cơ bản:
basic_prime_check.py
def is_prime_basic(n):
"""
Kiểm tra số nguyên tố - Phiên bản cơ bản
Độ phức tạp: O(n)
"""
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
# Kiểm tra chia hết cho các số từ 3 đến n-1
for i in range(3, n, 2):
if n % i == 0:
return False
return True
# Ví dụ sử dụng
number = int(input("Nhập số cần kiểm tra: "))
if is_prime_basic(number):
print(f"{number} là số nguyên tố")
else:
print(f"{number} không phải số nguyên tố")
⚡ Phiên bản tối ưu:
optimized_prime_check.py
import math
def is_prime_optimized(n):
"""
Kiểm tra số nguyên tố - Phiên bản tối ưu
Độ phức tạp: O(√n)
"""
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
# Chỉ kiểm tra đến √n
limit = int(math.sqrt(n)) + 1
for i in range(3, limit, 2):
if n % i == 0:
return False
return True
# Test với nhiều số
test_numbers = [2, 3, 4, 17, 25, 97, 100, 101]
for num in test_numbers:
result = is_prime_optimized(num)
print(f"{num}: {'Nguyên tố' if result else 'Không nguyên tố'}")
🔍 Phiên bản có log chi tiết:
detailed_prime_check.py
import math
import time
def is_prime_detailed(n):
"""
Kiểm tra số nguyên tố với log chi tiết
"""
print(f"\n🔍 Kiểm tra số {n}:")
print("-" * 30)
start_time = time.time()
# Kiểm tra các trường hợp đặc biệt
if n <= 1:
print(f"❌ {n} ≤ 1, không phải số nguyên tố")
return False
if n == 2:
print("✅ Số 2 là số nguyên tố duy nhất chẵn")
return True
if n % 2 == 0:
print(f"❌ {n} là số chẵn, không phải số nguyên tố")
return False
# Tính giới hạn
limit = int(math.sqrt(n)) + 1
print(f"📐 √{n} ≈ {math.sqrt(n):.2f}")
print(f"🎯 Kiểm tra từ 3 đến {limit-1}")
# Kiểm tra các ước
for i in range(3, limit, 2):
if n % i == 0:
print(f"❌ {n} ÷ {i} = {n//i} (dư {n%i})")
print(f" Tìm thấy ước: {n} = {i} × {n//i}")
return False
print(f"✓ {n} ÷ {i} = {n//i} (dư {n%i})")
end_time = time.time()
print(f"✅ {n} là số nguyên tố!")
print(f"⏱️ Thời gian: {(end_time - start_time)*1000:.3f} ms")
return True
# Sử dụng
number = int(input("Nhập số cần kiểm tra: "))
is_prime_detailed(number)
📋 Ví dụ Minh họa
✅ Ví dụ số nguyên tố:
Kiểm tra số 17:
- √17 ≈ 4.12 → Kiểm tra đến 4
- 17 ÷ 3 = 5 dư 2 ✓
- Không có ước nào → 17 là số nguyên tố
Kiểm tra số 29:
- √29 ≈ 5.39 → Kiểm tra đến 5
- 29 ÷ 3 = 9 dư 2 ✓
- 29 ÷ 5 = 5 dư 4 ✓
- Không có ước nào → 29 là số nguyên tố
❌ Ví dụ hợp số:
Kiểm tra số 15:
- √15 ≈ 3.87 → Kiểm tra đến 3
- 15 ÷ 3 = 5 dư 0 ❌
- Tìm thấy ước: 15 = 3 × 5 → 15 không phải số nguyên tố
Kiểm tra số 21:
- √21 ≈ 4.58 → Kiểm tra đến 4
- 21 ÷ 3 = 7 dư 0 ❌
- Tìm thấy ước: 21 = 3 × 7 → 21 không phải số nguyên tố
📊 Bảng số nguyên tố đầu tiên:
STT
Số nguyên tố
STT
Số nguyên tố
1
2
11
31
2
3
12
37
3
5
13
41
4
7
14
43
5
11
15
47
6
13
16
53
7
17
17
59
8
19
18
61
9
23
19
67
10
29
20
71
📝 Nhật ký các bước thực hiện
Nhật ký sẽ hiển thị ở đây sau khi bạn kiểm tra một số...
Post a Comment