MATLAB、Python求水仙花数


水仙花数是指一个 3 位数,它的每个位上的数字的立方和等于它本身(例如: 1 3 + 5 3 + 3 3 = 153 1^3+5^3+3^3=153 ) 也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数。


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)
发布了16 篇原创文章 · 获赞 8 · 访问量 1827

猜你喜欢

转载自blog.csdn.net/wayne6515/article/details/104442410