找出1---1000000内的完全数--不要到死循环里

来源:互联网 发布:pc淘宝直播入口在哪 编辑:程序博客网 时间:2024/04/29 23:27
<?phpheader('Content-type:text/html;charset=utf8');/*如果一个数恰好等于它的因子之和,则称该数为“完全数”[1]  。各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的和等于它本身的自然数叫做完全数(Perfect number),又称完美数或完备数。例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。第三个完全数是496,有约数1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9个数相加,1+2+4+8+16+31+62+124+248=496。后面的完全数还有8128、33550336等等。题目:找出1--1000000中的完全数===注意不要入死循环中;------难点;*/for ($j=1; $j < 1000000; $j++) {     $brr=find($j);    $sum=0;    for ($i=0; $i < count($brr); $i++) {         $sum=$sum+$brr[$i];    }    if ($sum==$j) {        echo $j."<br/>";    }}//var_dump(find(33550336));//echo 15%4;exit;//找出一个整数的因子function find($a){    $arr=array();    $top=ceil($a/2)+1;    for ($i=1; $i < $top ; $i++) {         if ($a%$i == 0) {//%取余数,注意这里不能从0开始,分母不能为0;            $arr[]= $i;        }    }    return $arr;}/*33550336  的因子:array  0 => int 1  1 => int 2  2 => int 4  3 => int 8  4 => int 16  5 => int 32  6 => int 64  7 => int 128  8 => int 256  9 => int 512  10 => int 1024  11 => int 2048  12 => int 4096  13 => int 8191  14 => int 16382  15 => int 32764  16 => int 65528  17 => int 131056  18 => int 262112  19 => int 524224  20 => int 1048448  21 => int 2096896  22 => int 4193792  23 => int 8387584  24 => int 16775168 */?>

0 0
原创粉丝点击