5/5 - (1 bình chọn)

Bài 100: Số Hoàn Hảo: Hai Cách Kiểm Tra và So Sánh Hiệu Suất

Số hoàn hảo là một số nguyên dương bằng tổng các ước số thực sự của nó (không tính chính nó). Ví dụ, số 6 là số hoàn hảo vì:

Dưới đây là hai cách kiểm tra số hoàn hảo: một cách đơn giản dễ hiểu và một cách tối ưu hơn.

Khuyến mãi đặc biệt thêm danh sách 10 bài tập nâng cao khả năng lập trình Python:

  1. Bài: 91 Học Python – Sử dụng hàm tìm số nhỏ nhất trong 2 số để tìm số nhỏ nhất trong 3 số mới nhất
  2. Bài 92: Viết hàm cộng, trừ, nhân, chia hai phân số
  3. Bài 93 Viết chương trình con tính tổng các phần tử trong một mảng
  4. Bài 94: Viết chương trình con tính tổng các phần tử chẵn trong một mảng
  5. Bài 95: Đếm số lượng số nguyên tố trong mảng bằng Python
  6. Bài 96 : Tính trung bình cộng các số nguyên tố trong mảng bằng Python
  7. Bài 97 Tính trung bình cộng các số chính phương trong mảng bằng Python
  8. Bài 98: Viết 2 chương trình con tìm Max, Min và vị trí của Max, Min
  9. Bài 99 Học Python – Tính Số Fibonacci Hai cách tính và so sánh hiệu suất mới nhất

  10. Bài 100: Số Hoàn Hảo Hai Cách Kiểm Tra và So Sánh Hiệu Suất

1. Cách 1: Kiểm tra số hoàn hảo theo cách đơn giản

Duyệt tất cả các số nhỏ hơn số cần kiểm tra và tính tổng các ước số.

 
def so_hoan_hao_don_gian(n):
    tong_uoc = 0
    for i in range(1, n):
        if n % i == 0:
            tong_uoc += i
    return tong_uoc == n

# Ví dụ sử dụng
print(so_hoan_hao_don_gian(6))  # Kết quả: True
print(so_hoan_hao_don_gian(28)) # Kết quả: True

Ưu điểm:

  • Dễ hiểu, dễ cài đặt.

Nhược điểm:

  • Hiệu suất kém với số lớn (độ phức tạp O(n)).

2. Cách 2: Kiểm tra số hoàn hảo theo cách tối ưu

Thay vì duyệt tất cả các số từ 1 đến n-1, ta chỉ cần kiểm tra các ước số từ 1 đến và tính tổng cả cặp ước số.

 
def so_hoan_hao_toi_uu(n):
    if n < 2:
        return False
    tong_uoc = 1
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            tong_uoc += i
            if i != n // i:
                tong_uoc += n // i
    return tong_uoc == n

# Ví dụ sử dụng
print(so_hoan_hao_toi_uu(6))  # Kết quả: True
print(so_hoan_hao_toi_uu(28)) # Kết quả: True

Ưu điểm:

  • Hiệu suất cao hơn (độ phức tạp O(√n)).
  • Chạy nhanh hơn đáng kể với số lớn.

Nhược điểm:

  • Cần hiểu về ước số và cách tối ưu thuật toán.

3. So sánh hai phương pháp

Phương pháp Độ phức tạp Tốc độ thực thi Bộ nhớ sử dụng
Cách đơn giản O(n) Chậm Thấp
Cách tối ưu O(√n) Nhanh hơn Thấp

Kết luận

Nếu bạn chỉ kiểm tra số nhỏ, cách đơn giản có thể đủ dùng. Nhưng với số lớn, cách tối ưu giúp tiết kiệm thời gian đáng kể. Bạn hãy thử chạy hai đoạn mã trên để tự kiểm chứng nhé!

 

Nếu bạn thấy hay ! xin bạn 1 phút ! vui lòng đánh giá 5 sao cho trang website của chúng tôi ! để có động lực làm thêm nhiều bài hay nữa ! cảm ơn quý khách nhé !

 

Khóa học Python online từ cơ bản đến nâng cao

Vi Tính Tấn Dân

Mình rất đam mê về máy vi tính và máy in. Và mình đã đeo đuổi ước mơ và làm việc về máy vi tính mới đây mà đã 15 năm. Mình thích chia sẻ mọi kiến thức và kinh nghiệm mà mình có được cho tất cả các bạn ! Trong khi mình viết nếu có điều gì thiếu sót mong các bạn thông cảm cho mình nhé ! Mình Cám ơn trước !

Published by
Vi Tính Tấn Dân

Recent Posts

100 triệu là mức lương của lập trình Python vì sao?

100 triệu là mức lương của lập trình Python vì sao? 1. Vì sao Python…

4 ngày ago

This website uses cookies.