shell:求某個數以內的所有完全數

#!/bin/bash

for ((i=1;$[(2**i-1)*(2**(i-1))]<=$1;i++))
do
        num=$(factor $i $[2**i-1]|awk 'NF==2'|wc -l)
        if [ "$num" -eq 2 ]
        then 
                echo $[(2**i-1)*(2**(i-1))]
        fi
done


[root@centos6-1 ~]# sh getws.sh 10000
6
28
496
8128
[root@centos6-1 ~]# 

這裏用到了一個求完全數的公式:

設p爲一個整數:
如果p是質數,且2^p-1也是質數,那麼(2^p-1)*2^(p-1)便是一個完全數。
例如p=2,是一個質數,2^p-1=3也是質數,(2^p-1)*2^(p-1)=3*2=6,是完全數。
例如p=3,是一個質數,2^p-1=7也是質數,(2^p-1)*2^(p-1)=7*4=28,是完全數。
例如p=5,是一個質數,2^p-1=31也是質數,(2^p-1)*2^(p-1)=31*16=496是完全數。

參考鏈接: http://bbs.chinaunix.net/thread-4111789-1-1.html

發佈了44 篇原創文章 · 獲贊 22 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章