php 求水仙花數優化

2021-06-22 13:35:40 字數 2613 閱讀 1066

水仙花數是指乙個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...