수선화 숫자는 n자리 숫자(n>=3)를 의미하며, 각 숫자의 n제곱의 합은 그 자체와 같고, n은 해당 숫자의 자릿수입니다. (예: 1^3+5^3+3^3 = 153)
수선화수는 암스트롱수라고도 합니다.
3자리 수선화 번호는 4개입니다: 153, 370, 371, 407
4자리 수선화 번호는 3개 있습니다: 1634, 8208, 9474
3개 있습니다: 748, 92727, 93084
6자리 수선화 번호는 1: 548834
7자리 수선화 번호는 4: 1741725, 4210818, 9800817, 9926315
여덟 수선화 번호가 세 개 있습니다: 24678050, 24678051, 88593477
...
가장 큰 수선화 숫자는 39자리(115132219018763992565095597973971522401), 10 기본 자연수에는 88개의 수선화 숫자가 있습니다. ㅋㅋㅋ 리
2. 수선화 수를 찾는 알고리즘을 최적화하고, 3~7자리 수선화 수를 구합니다.
최적화 방법: pow에 대한 0-9 N 차 대응 테이블을 생성하고 수선화 수를 줄입니다. 계산<?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 class="brush:php;toolbar:false">';
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 )
42%
단축했습니다.
관련 권장 사항:
php를 통해 ID 번호를 확인하는 방법
php를 통해 YouTube 동영상 정보를 얻는 방법
php unserialize 솔루션 정보 거짓 반환
위 내용은 PHP를 사용하여 수선화 수를 최적화하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!