SỐ HOÀN HẢO
Một số hoàn hảo là một số nguyên dương mà tổng các ước số của nó (không tính chính nó) bằng chính nó. Ví dụ đơn giản nhất về một số hoàn hảo là số 6, vì tổng các ước số của 6 (1, 2, 3) bằng chính nó (6).
Để tìm các số hoàn hảo, bạn có thể sử dụng một thuật toán duyệt qua tất cả các số từ 1 đến một giới hạn trên. Dưới đây là một ví dụ về cách tìm các số hoàn hảo:
Thuật toán tìm số hoàn hảo hoạt động như sau:
- Bước 1: Bắt đầu từ một số nguyên dương
n
. - Bước 2: Duyệt qua các số từ 1 đến
n-1
. - Bước 3: Kiểm tra xem số hiện tại có phải là ước của
n
hay không. Nếu số hiện tại chia hết chon
, nghĩa là nó là một ước củan
. - Bước 4: Nếu số hiện tại là ước của
n
, thì ta cộng nó vào một biến tổng (ví dụ:sum
). - Bước 5: Khi đã duyệt qua tất cả các số từ 1 đến
n-1
, ta kiểm tra xem tổngsum
có bằngn
hay không. - Bước 6: Nếu tổng
sum
bằngn
, thìn
là một số hoàn hảo. Ngược lại,n
không phải là số hoàn hảo. - Bước 7: Tiếp tục từ bước 1 với các giá trị
n+1
,n+2
, và tiếp tục tìm các số hoàn hảo cho đến khi được yêu cầu dừng lại hoặc đạt đến một giới hạn nào đó.
def is_perfect_number(n):
divisors_sum = 0
for i in range(1, n):
if n % i == 0:
divisors_sum += i
return divisors_sum == n
def find_perfect_numbers(limit):
perfect_numbers = []
for num in range(1, limit):
if is_perfect_number(num):
perfect_numbers.append(num)
return perfect_numbers
# Ví dụ sử dụng:
limit = 10000
perfect_numbers = find_perfect_numbers(limit)
print(perfect_numbers) # Output: [6, 28, 496, 8128]
Trong ví dụ này, chúng ta tạo hai hàm. Hàm is_perfect_number(n)
kiểm tra xem một số n
có phải là số hoàn hảo hay không. Chúng ta duyệt qua các số từ 1 đến n-1
và kiểm tra nếu n
chia hết cho số hiện tại (i
), thì ta cộng i
vào biến divisors_sum
. Cuối cùng, chúng ta trả về kết quả kiểm tra xem divisors_sum
có bằng n
hay không.
Hàm find_perfect_numbers(limit)
tìm các số hoàn hảo trong khoảng từ 1 đến limit
. Chúng ta duyệt qua các số từ 1 đến limit-1
và kiểm tra mỗi số bằng cách gọi hàm is_perfect_number()
. Nếu số đó là số hoàn hảo, chúng ta thêm nó vào danh sách perfect_numbers
.
Trong ví dụ trên, chúng ta tìm các số hoàn hảo trong khoảng từ 1 đến 10000 và in ra danh sách các số hoàn hảo tìm được: [6, 28, 496, 8128].