【算法】PHP实现阿姆斯特朗数

首先来看看概念:

如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。
例如1^3 + 5^3 + 3^3 = 153
当n=3时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。
水仙花数共有4个,分别为:153、370、371、407。

根据这个概念,可以直接实现

<?php

class Algorithm
{

    public function __contruct()
    {

    }

    /**
     * @name 获取指定范围内的阿姆斯特朗数
     * @param $max
     * @return array
     */
    public function getArmstrong($max)
    {
        $arr = array();
        for($i = 0; $i <= $max; $i++){
            $arms = $this->armstrong($i);
            if($arms){
                $arr[] = $i;
            }
        }
        return $arr;
    }

    /**
     * 阿姆斯特朗数
     * @param $m 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。
    例如1^3 + 5^3 + 3^3 = 153
    当n=3时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。
    水仙花数共有4个,分别为:153、370、371、407。
     */
    private function armstrong($m)
    {
        if($m == 0){
            return true;
        }
        $len = strlen($m);
        //echo $m.'--'.$len.'<br/>';
        $sum = 0;
        $m = (string)$m;
        //echo $m;
        for($i = 0; $i < $len; $i++){
            $sum = $sum + pow($m[$i], $len);
        }
        //echo $sum.'<br/>';
        if($sum == $m){
            return true;
        }
        return false;

    }

}


$algo = new Algorithm();

echo '<pre>';
$data = $algo->getArmstrong(10000000);
print_r($data);
die();

运行结果

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 8
    [9] => 9
    [10] => 153
    [11] => 370
    [12] => 371
    [13] => 407
    [14] => 1634
    [15] => 8208
    [16] => 9474
    [17] => 54748
    [18] => 92727
    [19] => 93084
    [20] => 548834
    [21] => 1741725
    [22] => 4210818
    [23] => 9800817
    [24] => 9926315
)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值