关于自恋数,问个matlab函数问题TT

img

你好,这个自恋数我已经写过代码了:

function main()
[S, R]= nacissistic(16, 3)% 比如这个16进制三位数
end
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进制的行向量,每一行代表一个数,列代表位数
if(base<=36) % 36进制以内都可以用数字字母表示
   S = dec2base(S,base,n);
end
end

最后输出结果是:

S =

  19×3 char 数组

    'EA0'
    '5B0'
    '8C0'
    'EA1'
    '5B1'
    '8C1'
    '173'
    'AC3'
    '285'
    '4A5'
    '156'
    '208'
    '248'
    'CA8'
    'E69'
    'AA9'
    '99A'
    '60B'
    '64B'


R =

    14    10     0
     5    11     0
     8    12     0
    14    10     1
     5    11     1
     8    12     1
     1     7     3
    10    12     3
     2     8     5
     4    10     5
     1     5     6
     2     0     8
     2     4     8
    12    10     8
    14     6     9
    10    10     9
     9     9    10
     6     0    11
     6     4    11

可见16进制三位数的自恋数足足有19个

然后改动主函数那一行,改成

[S, R]= nacissistic(10, 3)% 比如这个10进制三位数

结果:

S =

  4×3 char 数组

    '370'
    '371'
    '153'
    '407'


R =

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

可见10进制3位数的自恋数有4个,哈哈哈
其他的自己都可以测试哟,有帮助望采纳,谢谢啦