一、引言:水仙花数的数学魅力
水仙花数(Narcissistic Number),也称为自幂数或阿姆斯特朗数,是一个具有特殊数学性质的数字。对于三位数的水仙花数,它满足一个美妙的特性:这个数本身等于其各位数字的立方和。这种数字犹如水仙花般"自恋",因此得名。在本文中,我们将通过Python编程来寻找所有的三位水仙花数,这不仅是一个编程练习,更是数学之美在代码中的体现。
二、水仙花数的算法实现
案例:寻找所有三位水仙花数
问题描述:编写程序找出100到999之间所有的水仙花数。水仙花数定义为一个三位数abc,满足a³ + b³ + c³ = abc,其中a、b、c分别是该数的百位、十位和个位数字。
代码展示:
python
体验AI代码助手
代码解读
复制代码
#3.编程:求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a³+b³+c³=abc,则abc 是水仙花数。
#三位数abc-->100-999 range(100,1000)
for i in range(100,1000):
gw = i % 10
sw = i // 10 % 10
bw = i // 100
x = gw*gw*gw+sw*sw*sw+bw*bw*bw
if (i==x):
print(i,"是水仙花数")
运行结果:
代码分析:
-
循环范围设置:
for i in range(100,1000):遍历所有三位数(100到999)- range(100,1000)包含100但不包含1000,正好覆盖所有三位数
-
数字分解算法:
-
个位提取:
gw = i % 10- 使用取模运算符%获取除以10的余数,即个位数字
- 例如:153 % 10 = 3
-
十位提取:
sw = i // 10 % 10-
分两步操作:
i // 10:整数除法去掉个位,得到前两位% 10:取余数得到十位数字
-
例如:153 // 10 = 15,15 % 10 = 5
-
-
百位提取:
bw = i // 100- 直接除以100取整数部分,得到百位数字
- 例如:153 // 100 = 1
-
-
立方和计算:
x = gw*gw*gw + sw*sw*sw + bw*bw*bw- 计算个位、十位、百位数字的立方和
- 例如对于153:1³ + 5³ + 3³ = 1 + 125 + 27 = 153
-
条件判断与输出:
if (i==x):判断原数是否等于各位数字的立方和- 如果相等,则输出该数为水仙花数
三、数学验证与深入理解
让我们验证程序找到的四个水仙花数:
- 153:1³ + 5³ + 3³ = 1 + 125 + 27 = 153 ✓
- 370:3³ + 7³ + 0³ = 27 + 343 + 0 = 370 ✓
- 371:3³ + 7³ + 1³ = 27 + 343 + 1 = 371 ✓
- 407:4³ + 0³ + 7³ = 64 + 0 + 343 = 407 ✓
水仙花数在数学上属于"自幂数"的一种。对于n位数,如果满足每个位上的数字的n次幂之和等于该数本身,则称为n位自幂数。三位水仙花数就是n=3的特殊情况。
四、代码优化与扩展
- 使用幂运算符优化:
python
体验AI代码助手
代码解读
复制代码
for i in range(100, 1000):
num = str(i)
if i == sum(int(digit)**3 for digit in num):
print(f"{i} 是水仙花数")
2. 通用自幂数查找函数:
python
体验AI代码助手
代码解读
复制代码
def find_narcissistic_numbers(digits):
"""查找指定位数的所有自幂数"""
result = []
start = 10**(digits-1) if digits > 1 else 0
end = 10**digits
for num in range(start, end):
total = sum(int(d)**digits for d in str(num))
if total == num:
result.append(num)
return result
# 查找三位水仙花数
print("三位水仙花数:", find_narcissistic_numbers(3))
3. 四位数水仙花数(四叶玫瑰数)查找:
python
体验AI代码助手
代码解读
复制代码
# 查找四位自幂数(四叶玫瑰数)
for i in range(1000, 10000):
a = i // 1000
b = i // 100 % 10
c = i // 10 % 10
d = i % 10
if a**4 + b**4 + c**4 + d**4 == i:
print(f"{i} 是四叶玫瑰数")