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

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

C语言之基本算法38—格式化输出10000以内的所有完数

//穷举法! /* ================================================================== 题目:求10000以内的所有完数,统计数...
  • LZX19901012
  • LZX19901012
  • 2015年07月14日 02:41
  • 1327

找出1000以内的完全数

完全数:(Perfect Number)又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为...
  • ylyang12
  • ylyang12
  • 2016年10月10日 20:08
  • 858

求1000以内的所有“完全数”。

“完全数”是指一个数恰好等于它的所有因子之和,例如,6=1+2+3,6是“完全数”。 #include int main() { int num,i,m; for(num=1;num...
  • xyzzyj
  • xyzzyj
  • 2016年05月31日 23:58
  • 517

acm--找出n之内的所有完数及因子

/* *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称: *作者:田成琳 *完成日期:201...
  • u012246348
  • u012246348
  • 2013年12月24日 17:27
  • 1664

【程序13】求10000以内的所有完数

/*【程序13】 * 实例:求10000以内的所有完数 * 作者 中国风 * 如果一个数恰好等于其因子之和,这个数就称为完数。 * * 分析: * 求10000以内的所有完...
  • hanshileiai
  • hanshileiai
  • 2012年12月18日 12:34
  • 5416

运用java语言求1到1000内所有的完数(带源程序)

一个数如果恰好等于它的所有的可能因子之和,这个数就称为“完数”,汝6=1+2+3;找出1000以内的所有完数? public class Wanshu{ public static voi...
  • u011278431
  • u011278431
  • 2015年11月10日 15:19
  • 794

C语言学习笔记_算法——“求1000以内完数”

/*** 求1000以内完数(完数恰好等于它的真因子之和,如6=1+2+3). ***/ #include void main() { int num,sum,i; for(num=6;nu...
  • u014037335
  • u014037335
  • 2014年05月04日 21:45
  • 6494

求100以内的素数的个数,并以每行显示5个数的方式打印出来

首先我们了解素数的概念,质数(又称素数),是指在大于1的自然数中,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数)。#include int func(int i) { ...
  • nigulasi_dawei
  • nigulasi_dawei
  • 2017年05月01日 22:58
  • 774

java求n以内的完全数。所谓的完全数即如果一个数字的所有真因子之和等于自身,则称它为“完全数”或“完美数”

import java.util.Scanner; public class Perfect { public static void main(String[] args) { Scann...
  • miqiong9993
  • miqiong9993
  • 2016年10月12日 09:31
  • 551

计算100以内的素数的个数

以下代码是用来计算100以内的素数的个数,请把相应的空填上。   struct prime_number_node { int prime_number; prime_number_node* ...
  • u011407501
  • u011407501
  • 2013年10月06日 02:08
  • 1890
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell:求某个数以内的所有完全数
举报原因:
原因补充:

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