程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php中如何求水仙花數優化

php中如何求水仙花數優化

編輯:PHP綜合

水仙花數是指一個n位數(n>=3),它每個位上數字的n次冪之和等於它本身,n為它的位數。(例如:1^3+5^3+3^3 = 153)

水仙花數又稱阿姆斯特朗數。

三位的水仙花數有4個:153,370,371,407

四位的水仙花數有3個:1634,8208,9474

五位的水仙花數有3個:54748,92727,93084

六位的水仙花數有1個:548834

七位的水仙花數有4個:1741725,4210818,9800817,9926315

八位的水仙花數有3個:24678050,24678051,88593477

.....

最大的水仙花數有39位(115132219018763992565095597973971522401),十進制自然數中的所有水仙花數共有88個。

php 求水仙花數

1.窮舉法求水仙花數,求3~7位的水仙花數

<?php  
// 窮舉求水仙花數  
function narcissistic($n){  
      
    if($n<3 || $n>39){  
        return false;  
    }  
      
    // 保存執行結果  
    $result = array();  
      
    $start = pow(10,$n-1);  
    $end = pow(10, $n);  
      
    for($i=$start; $i<$end; $i++){  
        $total = 0;  
        $nums = str_split($i, 1);  
        foreach($nums as $num){  
            $total += pow($num, $n);  
        }  
      
        if($total==$i){  
            array_push($result, $i);  
        }  
    }  
      
    return $result;  
      
}  
      
// 獲取當前microtime  
function getMicrotime(){  
    list($usec, $sec) = explode(' ', microtime());  
    return (float)$usec + (float)$sec;  
}  
      
      
// 設定超時時間為3600秒  
set_time_limit(3600);  
      
// 記錄開始運行時間  
$start = getMicrotime();  
      
// 執行求出3~7位的水仙花數  
for($i=3; $i<=7; $i++){  
    $result[$i] = implode(',', narcissistic($i));  
}  
      
// 記錄運行結束時間  
$end = getMicrotime();  
      
// 輸出運行時間  
echo 'run time:'.(float)($end - $start);  
      
// 打印結果  
echo '<pre>';  
print_r($result);  
echo '</pre>';  
      
?>

執行結果:

run time:82.230147838593  
Array  
(  
    [3] => 153,370,371,407  
    [4] => 1634,8208,9474  
    [5] => 54748,92727,93084  
    [6] => 548834  
    [7] => 1741725,4210818,9800817,9926315  
)

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved