关闭

shell:求某个数以内的所有完全数

873人阅读 评论(0) 收藏 举报
分类:
#!/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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:189360次
    • 积分:1944
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:18篇
    • 译文:0篇
    • 评论:14条
    文章分类
    最新评论