1、概述
水仙花数是指一个n位正整数(n≥3),它的每个位上的数字的n次幂之和等于它本身。水仙花数也是一种具有特殊性质的数。
水仙花数最先是由英国数学家哈代(G.H.Hardy)发现的。他发现一些三位数满足如下奇特的现象:
简单地说,这些三位正整数在数值上等于其各位数字的立方之和(即3次幂之和)。哈代称为“水仙花数”。
除此之外,进一步研究还发现存在更高位数的水仙花数。以上所述均为三位的水仙花数,而四位的水仙花数有如下3个:
五位的水仙花数共有3个,示例如下:
数学家在理论上证明,最大的水仙花数不超过34位。因此,水仙花数是有限的。这种推广的水仙花数有时也称为阿姆斯特朗数。不同位数的水仙花数的个数如下:
・三位水仙花数:共4个;
・四位水仙花数:共3个;
・五位水仙花数:共3个;
・六位水仙花数:共1个;
・七位水仙花数:共4个;
・八位水仙花数:共3个;
・九位水仙花数:共4个;
・十位水仙花数:共1个;
当然还有很多,这里仅列举了前10位的水仙花数的个数。
2、c++
// 水仙花数
#include <stdio.h>
#include <math.h>
int main()
{
int b, s, g;
for(int num = 100; num < 1000; num++)
{
b = num/100;
s = num/10%10;
g = num%10;
// 使用计算幂的函数
if (num == (pow(b, 3) + pow(s, 3) + pow(g, 3)))
{
printf("%5d\n", num);
}
}
return 0;
}
3、python
# 水仙花数
for num in range(100, 1000):
b = int(num/100)
s = int(num/10)%10
g = num%10
if num == b**3 + s**3 + g**3:
print("水仙花数: ", num)