如果一個正整數等於其他各位數字的n次方之和,則稱他為阿姆斯特朗數(自戀性數):
水仙花數(Narcissistic number)也被稱為超完全數字不變數(pluperfect digital invariant, PPDI)、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(Armstrong number),水仙花數是指一個 n 位數(n≥3 ),它的每個位上的數字的 n 次冪之和等於它本身
例如:
1*3 + 5*3 + 3*3 = 153
什么是水仙花數
水仙花數只是自冪數的一種,嚴格來說3位數的3次冪數才稱為水仙花數。
附:其他位數的自冪數名字一位自冪數:獨身數兩位自冪數:沒有三位自冪數:水仙花數四位自冪數:四葉玫瑰數五位自冪數:五角星數六位自冪數:六合數七位自冪數:北斗七星數八位自冪數:八仙數九位自冪數:九九重陽數十位自冪數:十全十美數注:名字起的6666....
常見水仙花數
水仙花數又稱阿姆斯特朗數。
三位的水仙花數共有4個:153,370,371,407;四位的四葉玫瑰數共有3個:1634,8208,9474;五位的五角星數共有3個:54748,92727,93084;六位的六合數只有1個:548834;七位的北斗七星數共有4個:1741725,4210818,9800817,9926315;八位的八仙花數共有3個:24678050,24678051,88593477
算法題
求:n(n<= 65536)以內的所有阿姆斯特朗數
python實現
def armstrong(): num = 65536 while num >0: n = len(str(num)) sum = 0 for key in (str(num)): b = int(key) ** n sum += b if sum == num: print(num) num -= 1 armstrong()
js
function armstrong(){ var num = 65536; while (num > 0) { var sum = 0; var str = num + ""; var n = str.length; for(let key of str) { key = parseInt(key); sum += Math.pow(key,n); } if(sum == num) { console.log(sum); } num --; } } armstrong()
shell實現
#!/bin/bash armstrong(){ num=65536 while (($num > 0)) sum=0 do length=$(expr length "$num") for((i=0;$i<=$length-1;i=$i+1)); do loop="${num:$i:1}" n=`expr $loop` #echo $n #if test -z "$n" #then # echo "n is not set!" # break #fi sum=$(($sum+$n**$length)) done if [ $sum -eq $num ] then echo "$sum" fi let "num--" #echo "$num" done } armstrong
公眾號:
