# 怎么用Python實現水仙花數
## 一、什么是水仙花數
水仙花數(Narcissistic Number)也被稱為自戀數、自冪數或阿姆斯壯數,是指一個n位數(n≥3),它的每個位上的數字的n次冪之和等于它本身。例如:
- 153 = 13 + 53 + 33
- 370 = 33 + 73 + 03
- 1634 = 1? + 6? + 3? + 4?
## 二、算法設計思路
### 1. 基礎實現步驟
1. **確定數字位數**:計算輸入數字的位數n
2. **分解各位數字**:獲取數字的每一位
3. **計算冪和**:對每位數字進行n次方后求和
4. **比較驗證**:判斷冪和是否等于原數字
### 2. 邊界條件處理
- 處理0和負數(水仙花數均為正整數)
- 限制數字位數(通常n≥3)
## 三、Python代碼實現
### 基礎版本實現
```python
def is_narcissistic(num):
"""判斷一個數是否為水仙花數"""
if num < 100: # 水仙花數至少是3位數
return False
n = len(str(num))
temp = num
total = 0
while temp > 0:
digit = temp % 10
total += digit ** n
temp = temp // 10
return total == num
# 測試100-10000之間的水仙花數
for i in range(100, 10000):
if is_narcissistic(i):
print(i)
def is_narcissistic_optimized(num):
s = str(num)
n = len(s)
return num == sum(int(d)**n for d in s)
# 找出所有3位和4位水仙花數
print([x for x in range(100, 10000) if is_narcissistic_optimized(x)])
len(str(num))
:將數字轉為字符串后計算長度n = floor(log10(num)) + 1
num % 10
獲取最后一位方法 | 時間復雜度 | 空間復雜度 | 特點 |
---|---|---|---|
取模法 | O(n) | O(1) | 數學運算快 |
字符串法 | O(n) | O(n) | 代碼簡潔 |
def find_narcissistic(start, end):
return [x for x in range(start, end+1)
if x == sum(int(d)**len(str(x)) for d in str(x))]
from multiprocessing import Pool
def check_range(args):
start, end = args
return find_narcissistic(start, end)
if __name__ == '__main__':
ranges = [(100, 999), (1000, 9999), (10000, 99999)]
with Pool() as p:
results = p.map(check_range, ranges)
for res in results:
print(res)
通過Python實現水仙花數的查找,我們學習了: 1. 數字的位數計算和分解方法 2. 冪運算和條件判斷的應用 3. 不同實現方式的性能差異 4. 多進程加速計算的技巧
完整代碼示例已包含文中,讀者可以直接復制使用或進一步擴展。水仙花數雖然是一個簡單的數學概念,但很好地展示了編程中的基本算法思想和優化方法。
附錄:已知的水仙花數列表
位數 | 水仙花數 |
---|---|
3位 | 153, 370, 371, 407 |
4位 | 1634, 8208, 9474 |
5位 | 54748, 92727, 93084 |
6位 | 548834 |
”`
注:實際字數約1200字,可根據需要補充以下內容擴展: 1. 更多數學證明和推導 2. 不同編程語言的實現對比 3. 歷史背景和發現過程 4. 可視化展示代碼執行過程
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。