如何利用matlab求出10000之内所有的水仙花数(如153=1^3+5^3+3^3,这种数称为

如题所述

水仙花数只是自幂数的一种,严格来说三位数的3次幂数才成为水仙花数。
如153=1^3+5^3+3^3,这种数称为水仙花数。

若是10000以内,则必有四位数,四位自幂数不叫水仙花数,而叫做四叶玫瑰数。
现给一种简单的求水仙花数的代码,自创的。
x=0:9;
y=x;z=x;
[x,y,z]=meshgrid(x,y,z);
u=x.^3+y.^3+z.^3-100*x-10*y-z;
k=find(u==0&x~=0);
w=[x(k)';y(k)';z(k)']
sxhs=[100*w(1,:)+10*w(2,:)+w(3,:)]

w =

3 3 1 4
7 7 5 0
0 1 3 7

sxhs =

370 371 153 407

当然你也可以用循环来做
for m=100:999
m1=fix(m/100);
m2=rem(fix(m/10),10);
m3=rem(m,10);
if m==m1*m1*m1+m2*m2*m2+m3*m3*m3
disp(m)
end
end
输出结果为:
153 370 371 407

如果非要求四位数的四叶玫瑰数,有
for m=1000:9999
m1=fix(m/1000);
m2=rem(fix(m/100),10);
m3=rem(fix(m/10),10);
m4=rem(m,10);
if m==m1^4+m2^4+m3^4+m4^4
disp(m)
end
end

输出结果为: 1634 8208 9474

你也可以将后面的两步统一,即
for m=100:9999
m1=fix(m/1000);
m2=rem(fix(m/100),10);
m3=rem(fix(m/10),10);
m4=rem(m,10);
if (m==m1^4+m2^4+m3^4+m4^4)|m==m2^3+m3^3+m4^3
disp(m)
end
end

输出结果为:
153

370

371

407

1634

8208

9474
温馨提示:答案为网友推荐,仅供参考
相似回答