水仙花數是指乙個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)
// 儲存執行結果
$result = array();
$start = pow(10,$n-1);
$end = pow(10, $n);
for($i=$start; $i<$end; $i++)
if($total==$i)
}return $result;
}// 獲取當前microtime
function getmicrotime()
// 設定超時時間為3600秒
set_time_limit(3600);
// 記錄開始執行時間
$start = getmicrotime();
// 執行求出3~7位的水仙花數
for($i=3; $i<=7; $i++)
// 記錄執行結束時間
$end = getmicrotime();
// 輸出執行時間
echo 'run time:'.(float)($end - $start);
// 列印結果
echo '';
print_r($result);
echo '
';
?>
執行結果:
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
)
2.優化演算法求水仙花數,求3~7位的水仙花數
優化方法:為pow 建立0-9 n階的對應表,減少計算次數
<?php
// 優化求水仙花數
function narcissistic($n)
// 儲存執行結果
$result = array();
// n階pow對應表
$powlist = getpow($n);
$start = pow(10,$n-1);
$end = pow(10, $n);
for($i=$start; $i<$end; $i++)
if($total==$i)
}return $result;
}// 獲取當前microtime
function getmicrotime()
// 獲取n階pow對應表
function getpow($n)
return $powlist;
}// 設定超時時間為3600秒
set_time_limit(3600);
// 記錄開始執行時間
$start = getmicrotime();
// 執行求出3~7位的水仙花數
for($i=3; $i<=7; $i++)
// 記錄執行結束時間
$end = getmicrotime();
// 輸出執行時間
echo 'run time:'.(float)($end - $start);
// 列印結果
echo '';
print_r($result);
echo '
';
?>
執行結果:
run time:47.354328155518
array
( [3] => 153,370,371,407
[4] => 1634,8208,9474
[5] => 54748,92727,93084
[6] => 548834
[7] => 1741725,4210818,9800817,9926315
)
結果比對,優化後的演算法減少了42%的執行時間。
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,...
求水仙花數
找出水仙花數 首先我們需要了解水仙花數的概念 在數論中,水仙花數 narcissistic number 也稱為自戀數 自冪數 阿姆斯壯數或阿姆斯特朗數 armstrong number 是指一n位數,其各個數之n次方和等於該數。例如153 370 371及407就是三位數的水仙花數,其各個數之立方...
求水仙花 ghpython 水仙花數02
今天咱們繼續來看看老潘微博裡的乙個python小案例,求水仙花數,這個小案例在前兩天已經分享了,今天分享另一種方法,常言道只要思想不滑坡,方法總比困難多,而且今天的方法個人覺得更pythonic一點。水仙花數 四葉玫瑰數 五角星數 由於2位數的自冪數不存在,這裡直接從100遍歷到100000 for...