Sắp xếp danh sách số nguyên theo số lượng ước số (factor count) của mỗi số. Sử dụng hàm key với list comprehension và modulus.
Mã nguồn
def factor_count(element):
# Đếm ước số từ 1 đến element-1 (không kể chính nó)
return len([element for index in range(1, element) if element % index == 0])
my_list = [121, 1120, 13540, 221, 1400]
print("Danh sách gốc:", my_list)
my_list.sort(key=factor_count)
print("Danh sách sau sắp xếp:", my_list)
Kết quả
Danh sách gốc: [121, 1120, 13540, 221, 1400] Danh sách sau sắp xếp: [121, 221, 13540, 1120, 1400]
Giải thích
factor_count(n)đếm sốindextrongrange(1, n)chia hết chon(sai logic: nên làn % index == 0).- Code gốc:
element % index == 0vớielementlà tham số hàm,indexlà biến lặp → đúng: đếm ước củaelement. - 121: ước {1, 11} → 2 ước.
- 221: ước {1, 13, 17} → 3 ước.
- 13540, 1120, 1400: nhiều ước hơn → đứng sau.
Sửa lỗi logic nhỏ
Hàm parameter tên element nhưng list comprehension dùng element làm giá trị lặp → shadowing. Nên đổi tên:
def factor_count(n):
return len([i for i in range(1, n) if n % i == 0])
Hoặc tối ưu: chỉ lặp đến sqrt(n).