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

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

        五位的水仙花数共有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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐望云起

如果觉得有用,请不吝打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值