水仙花数是指一个 3 位数,它的每个位上的数字的立方和等于它本身(例如: ) 也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数。
MATLAB代码如下:
m = 100:999; % m是向量,m1,m2,m3都是和m同长度的向量
m1 = rem(m,10); % rem(x,y):求整除x/y的余数
m2 = rem(fix(m/10),10); % 让x向0靠近取整 如fix(3.7)=3 fix(-2.7)=-2
m3 = fix(m/100) % 取第一位
k = find(m == m1.*m1.*m1+m2.*m2.*m2+m3.*m3.*m3)
s = m(k) % 最后一句别加分号,加了执行完就不显示了
输出:
s =
153 370 371 407
同样的还有四次方的玫瑰花数:
m = 1000:9999; % m是向量,m1,m2,m3都是和m同长度的向量
m1 = rem(m,10); % rem(x,y):求整除x/y的余数
m2 = rem(fix(m/10),10); % 让x向0靠近取整 如fix(3.7)=3 fix(-2.7)=-2
m3 = rem(fix(m/100),10); % 取百位
m4 = fix(m/1000); % 取第一位
k = find(m == m1.*m1.*m1.*m1+m2.*m2.*m2.*m2+m3.*m3.*m3.*m3+m4.*m4.*m4.*m4);
roses = m(k)
输出:
roses =
1634 8208 9474
用Python实现:
for i in range(100,1000):
a=int(i/100)
b=int(i/10)%10
c=i%10
if i==a**3+b**3+c**3:
print(i)
for i in range(1000,9999):
a=int(i/1000)
b=int(i/100)%10
c=int(i/10)%10
d=i%10
if i==a**4+b**4+c**4+d**4:
print(i)