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

Utiliser php pour optimiser le nombre de jonquilles

jacklove
Libérer: 2023-03-31 08:42:01
original
3220 Les gens l'ont consulté

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;
'; ?>
Copier après la connexion

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
)
Copier après la connexion


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;
'; ?>
Copier après la connexion

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
)
Copier après la connexion

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal