A armstrong number是一個數字,它是它自己的數字 的總和,每個數字都增加到數字位數的冪。查找阿姆斯壯號的簡化代碼
如下所示尋找7位阿姆斯特朗號碼,使用bsxfun
,因爲它是相當快的原因,我的代碼,但它只能接受3張操作數(Mathematica的類似功能Outer
可以接受多個參數)。我怎樣才能讓我的代碼更緊湊?
tic
m1=(1:9).^7;
m=(0:9).^7;
r1=bsxfun(@plus, m1', m);
r2=bsxfun(@plus, r1, reshape(m,1,1,[]));
r3=bsxfun(@plus, r2, reshape(m,1,1,1,[]));
r4=bsxfun(@plus, r3, reshape(m,1,1,1,1,[]));
r5=bsxfun(@plus, r4, reshape(m,1,1,1,1,1,[]));
r6=bsxfun(@plus, r5, reshape(m,1,1,1,1,1,1,[]));
r7= permute(r6, 7:-1:1);
A=reshape((1e6:1e7-1), size(r7));
A(A==r7)
toc
(*
ans =
1741725
4210818
9800817
9926315
*)
爲什麼'。^ 7'?它不應該是'。^ 3'嗎? –
@LuisMendo不,功率等於整數長度。 – mathe
難道你不能用'm(:)'替換你所有'重塑(m,1,1,[])'的東西,然後就調用'r1''和'r2''等等。 – Dan