数据结构和算法 数论 水仙花数

1、概述

        水仙花数是指一个n位正整数(n≥3),它的每个位上的数字的n次幂之和等于它本身。水仙花数也是一种具有特殊性质的数。

        水仙花数最先是由英国数学家哈代(G.H.Hardy)发现的。他发现一些三位数满足如下奇特的现象:

        153=1^3+5^3+3^3

        370=3^3+7^3+0^3

        371=3^3+7^3+1^3

        407=4^3+0^3+7^3

        简单地说,这些三位正整数在数值上等于其各位数字的立方之和(即3次幂之和)。哈代称为“水仙花数”。

        除此之外,进一步研究还发现存在更高位数的水仙花数。以上所述均为三位的水仙花数,而四位的水仙花数有如下3个:

        1634=1^4+6^4+3^4+4^4

        8208=8^4+2^4+0^4+8^4

        9474=9^4+4^4+7^4+4^4

扫描二维码关注公众号,回复: 14175737 查看本文章

        五位的水仙花数共有3个,示例如下:

        54748=5^5+4^5+7^5+4^5+8^5

        92727=9^5+2^5+7^5+2^5+7^5

        93084=9^5+3^5+0^5+8^5+4^5

        数学家在理论上证明,最大的水仙花数不超过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)

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/124907029