水仙花數是指乙個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.230147838593array( [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.354328155518array( [3] => 153,370,371,407 [4] => 1634,8208,9474 [5] => 54748,92727,93084 [6] => 548834 [7] => 1741725,4210818,9800817,9926315)
結果比對,優化後的演算法減少了42%的執行時間。
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!
水仙花數是指乙個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.230147838593array( [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.354328155518array( [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...