

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
PYTHON
# Hàm kiểm tra số nguyên tố
def is_prime(n):
if n < 2: #Nếu nhỏ hơn 2 thì k phải số nguyên tố ⇒ Sai
return False
for i in range(2, int(n**0.5) + 1): #Tạo 1 vòng lặp từ 2 tới căn bậc 2 của n
if n % i == 0: #Nếu số n chia hết cho số i thì ⇒ Sai.
return False
return True #Còn lại không trong trường hợp nào bên trên ⇒ Đúng
# Hàm liệt kê tất cả các ước số nguyên tố của một số tự nhiên
def prime_factors(n):
factors = [] #Tạo 1 danh sách chứa ước của số nguyên tố
for i in range(2, n + 1): #Kiểm tra từ 2 tới n
#Kiểm tra nếu nó là số nguyên tố bằng hàm con đã tạo bên trên và nó chia hết cho số i thì cho nó vào danh sách chứa ước các số nguyên tố.
if is_prime(i) and n % i == 0:
factors.append(i)
return factors
# Chương trình chính
#Nhập vào 2 số tự nhiên cho trước gọi tắt là N và M
n = int(input("Nhập số tự nhiên N: "))
m = int(input("Nhập số tự nhiên M: "))
#Dùng hàm con kiểm tra ước số nguyên tố bên trên
#Nếu danh sách ước của số nguyên tố N = danh sách ước của số nguyên tố M thì in ra nó là 2 số nguyên tố tương đương ngược lại in ra không phải
if (prime_factors(n) == prime_factors(m)):
print(n, "và", m, "là hai số nguyên tố tương đương")
else:
print(n, "và", m, "không phải hai số nguyên tố tương đương")
*Phần giải thích ở trên mình gõ ở trong phần trả lời không phải trong code nên không có trong ảnh
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin
9065
98454
5333
code này không tối ưu
9065
98454
5333
viết hàm kiểm tra nguyên tố `O(sqrtN)` ổn rồi nhưng việc tìm các ước lại triển khai thuật toán `O(N)` không ổn. Mới cả cái này nên viết hàm phân tích thừa số nguyên tố chứ không nên làm như này
193
5000
105
cảm ơn bạn đã góp ý !
193
5000
105
mình sẽ cải thiện vào lần sau ạ