Kiểm tra Số Armstrong trong Python | Laptrinhcanban.com

HOME › >>

Kiểm tra Số Armstrong trong Python

Số Armstrong, còn được gọi là số Narcissistic, là một loại số tự nhiên đặc biệt trong toán học. Một số được gọi là Số Armstrong nếu tổng lũy thừa của các chữ số của nó bằng chính nó. Trong bài viết này, chúng ta sẽ tìm hiểu về Số Armstrong, cách kiểm tra chúng bằng Python và viết một chương trình để tìm các số Armstrong trong một khoảng số cho trước.

Số Armstrong là gì?

Một số Armstrong là một số tự nhiên mà tổng lũy thừa của các chữ số của nó bằng chính nó. Một số Armstrong N với N chữ số thỏa mãn điều kiện:

N = (d_1^N + d_2^N + … + d_N^N)

Ví dụ về các số Armstrong là 1, 153, 370, 371 và 407. Hãy xem xét số 153:

(1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153)

Điều này chứng minh rằng 153 là một số Armstrong.

Kiểm tra Số Armstrong trong Python

Để kiểm tra xem một số có phải là Số Armstrong hay không, chúng ta cần thực hiện một số bước:

  1. Chia số thành các chữ số riêng lẻ.
  2. Tính lũy thừa của từng chữ số theo lũy thừa của số chữ số.
  3. Tính tổng các lũy thừa này.
  4. So sánh tổng với số ban đầu. Nếu chúng bằng nhau, số đó là Số Armstrong.

Dưới đây là một ví dụ về cách kiểm tra Số Armstrong bằng Python:

def is_armstrong_number(number):
# Chuyển số thành chuỗi để dễ dàng truy cập từng chữ số
num_str = str(number)
# Số chữ số
num_digits = len(num_str)
# Tính tổng lũy thừa của từng chữ số
total = sum(int(digit) ** num_digits for digit in num_str)
# So sánh với số ban đầu
return total == number

# Kiểm tra các số từ 1 đến 10000 và in ra các số Armstrong
for i in range(1, 10001):
if is_armstrong_number(i):
print(i, end=", ")

Kết quả sẽ là danh sách các số Armstrong trong khoảng từ 1 đến 10000.

1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 

Hiệu suất và tối ưu hóa

Khi kiểm tra các số lớn, cách tính lũy thừa và tổng có thể gây ra hiệu năng kém. Để tối ưu hóa chương trình, bạn có thể sử dụng một số cách:

  1. Sử dụng danh sách chứa các chữ số thay vì chuyển số thành chuỗi.
  2. Tính lũy thừa cho từng chữ số và lưu trữ chúng, sau đó tính tổng cuối cùng.

Dưới đây là một phiên bản tối ưu hóa của hàm kiểm tra Số Armstrong:

def is_armstrong_number_optimized(number):
num = number
num_digits = len(str(num))
digit_powers = [int(digit) ** num_digits for digit in str(num)]
total = sum(digit_powers)
return total == num

# Kiểm tra các số từ 1 đến 10000 và in ra các số Armstrong
for i in range(1, 10001):
if is_armstrong_number_optimized(i):
print(i, end=", ")

Phiên bản này sẽ thực hiện tốt hơn đối với các số lớn hơn.

Kết luận

Trên đây Kiyoshi đã hướng dẫn bạn về cách kiểm tra và in ra các số Armstrong rồi. Việc nắm vững các khái niệm này sẽ giúp bạn xử lý nhiều loại vấn đề toán học khác nhau trong lập trình Python.

URL Link

https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/so-trong-python/kiem-tra-so-armstrong-trong-python/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.