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

原创 2013年12月02日 11:54:03
#!/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

版权声明:本文为博主原创文章,未经博主允许不得转载。

判断 n 以内的完全数有多少个!

package Test1; //如果一个数恰好等于它的因子之和,则称该数为“完全数”。 import java.util.Scanner; public class Seven { publi...

Switch Game<开灯问题>关于n以内的完全平方数个数求解

Switch Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To...

第一周第三天([算式][九九乘法表][求素数][求1000以内数相加但尾数是三的数跳出不计算][生小兔子问题] [金字塔问题] [求1+3+...+(2^20-1)的值][求1000以内的完全数])

目录算式 生小兔子问题 金字塔问题 求1+3+…+(2^20-1)的值 求1000以内的完全数 求1000以内数相加但尾数是三的数跳出不计算 九九乘法表 求1000以内的素数 算式pa...

java求10000以内的完数附有结果

  • 2012年07月03日 10:54
  • 14KB
  • 下载

求任意数以内所有可以表示为连续素数之和的素数。

/* * 求100以内所有可以表示为连续素数之和的素数。 * 素数i和j(i

求100以内能被3整除的数

  • 2014年10月02日 06:20
  • 843B
  • 下载

求100以内的素数 水仙花数

1、新建一个Win32控制套
  • wwkaven
  • wwkaven
  • 2014年07月28日 19:53
  • 768

求30位以内的数的和

  • 2014年08月12日 20:01
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell:求某个数以内的所有完全数
举报原因:
原因补充:

(最多只允许输入30个字)