关于一个MATLAB的一个程序和算法

img


例如10进制的3位自恋数
153=1的三次方+5的三次方+3的三次方

同学你好,函数供参考,为了调用,可以写个main函数

function [S, R]= nacissistic(base, n)
A = cell(1,n);
[A{:}] = ndgrid(0:base-1);
for i = 1:n
    A{1,i} = A{1,i}(:);
end
A = cell2mat(A);%所有可能的n位base进制数
A(A(:,1)==0,:) = [];%去除最高位为0的数
B = sum(A.^n,2);%每个数的位置依次n次方相加,表示成十进制
N = repmat(n-1:-1:0,size(A,1),1);% 幂指标
C = sum(A.*base.^N,2);%每个n位base进制数表示成十进制
p = B==C;
S = C(p,1); % 这个是10进制下的结果
R = A(p,:); % 这个是base进制的行向量,每一行代表一个数,列代表位数
end

函数调用示例:
比如10进制,3位数:

[S, R]= nacissistic(10, 3)

结果:

S =

   370
   371
   153
   407

R =

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

可见还是不错的

再来一个,10进制,4位数

[S, R]= nacissistic(10, 4)

结果:

S =

        1634
        9474
        8208


R =

     1     6     3     4
     9     4     7     4
     8     2     0     8

再来一个陌生的,11进制,3位数

[S, R]= nacissistic(11, 3)

结果就很好玩,你应该看的是R每一行的值,每一行都是一个11进制的数(S只是11进制的数转换成10进制后的值,看不出什么名堂)

S =
        1280
         126
        1216
        1161
         370
         855

R =

    10     6     4
     1     0     5
    10     0     6
     9     6     6
     3     0     7
     7     0     8

好有意思的事情啊,有帮助还望题主给个采纳支持一下答主答题哦,谢谢啦

这个和水仙花数很像