阿姆斯特朗數


 如果一個正整數等於其他各位數字的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

 

公眾號:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM