Maison >développement back-end >tutoriel php >Utiliser php pour optimiser le nombre de jonquilles

Utiliser php pour optimiser le nombre de jonquilles

jacklove
jackloveoriginal
2018-06-09 11:47:443274parcourir

Le nombre narcisse fait référence à un nombre à n chiffres (n>=3). La somme de la nième puissance des nombres dans chaque chiffre est égale à elle-même, et n est son nombre de chiffres. (Par exemple : 1^3+5^3+3^3 = 153)

Le numéro de la jonquille est également appelé numéro Armstrong.

Il y a 4 jonquilles à trois chiffres : 153, 370, 371, 407

Il y a 3 jonquilles à quatre chiffres : 1634, 8208 , 9474

Il y a trois jonquilles à cinq chiffres : 54748, 92727, 93084

Jonquilles à six chiffres Le numéro a 1 : 548834

La jonquille à sept chiffres comporte 4 chiffres : 1741725, 4210818, 9800817, 9926315

Le numéro à huit chiffres Il existe 3 numéros de jonquille : 24678050, 24678051, 88593477

....

Le plus grand numéro de jonquille comporte 39 chiffres ( 11513221901876399256509559797397152 2401), il y a 88 numéros de jonquilles dans les nombres naturels décimaux.

php Trouver le nombre de jonquilles

1. Trouver le nombre de jonquilles par méthode exhaustive, trouver un nombre de jonquilles à 3 à 7 chiffres

<?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;
'; ?>

Résultat de l'exécution :

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 . Algorithme d'optimisation pour trouver le nombre de narcisses, trouver le nombre de narcisses en 3~7 chiffres

Méthode d'optimisation : Créer une table de correspondance d'ordre 0-9 N. pour pow réduire le nombre de calculs

<?php
// 优化求水仙花数
function narcissistic($n){
    if($n<3 || $n>39){
        return false;
    }
    // 保存执行结果
    $result = array();
    // n阶pow对应表
    $powlist = getPow($n);
    $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 += $powlist[$num];
        }
        if($total==$i){
            array_push($result, $i);
        }
    }
    return $result;
}
// 获取当前microtime
function getMicrotime(){
    list($usec, $sec) = explode(&#39; &#39;, microtime());
    return (float)$usec + (float)$sec;
}
// 获取n阶pow对应表
function getPow($n){
    $powlist = array();
    for($i=0; $i<=9; $i++){
        array_push($powlist, pow($i,$n));
    }
    return $powlist;
}
// 设定超时时间为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;
'; ?>

Résultats d'exécution :

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
)

Comparaison des résultats, le algorithme optimisé réduit de 42 Le temps d'exécution de %.

Cet article explique comment utiliser PHP pour optimiser le nombre de jonquilles. Pour plus de contenu connexe, veuillez faire attention au site Web chinois PHP.

Recommandations associées :

Comment vérifier le numéro d'identification via php

Comment obtenir des informations sur les vidéos YouTube via php

À propos de la solution pour la désérialisation de php renvoyant false

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn