>백엔드 개발 >PHP 튜토리얼 >PHP를 사용하여 수선화 수를 최적화하세요

PHP를 사용하여 수선화 수를 최적화하세요

jacklove
jacklove원래의
2018-06-09 11:47:443275검색

수선화 숫자는 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(&#39; &#39;, microtime());
    return (float)$usec + (float)$sec;
}
// 设定超时时间为3600秒
set_time_limit(3600);
// 记录开始运行时间
$start = getMicrotime();
// 执行求出3~7位的水仙花数
for($i=3; $i<=7; $i++){
    $result[$i] = implode(&#39;,&#39;, narcissistic($i));
}
// 记录运行结束时间
$end = getMicrotime();
// 输出运行时间
echo &#39;run time:&#39;.(float)($end - $start);
// 打印结果
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
print_r($result);
echo &#39;
'; ?>실행 결과:

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를 사용하여 수선화 수를 최적화하는 방법을 설명합니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트를 참고하세요.

관련 권장 사항:

php를 통해 ID 번호를 확인하는 방법

php를 통해 YouTube 동영상 정보를 얻는 방법

php unserialize 솔루션 정보 거짓 반환

위 내용은 PHP를 사용하여 수선화 수를 최적화하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.