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(' ', 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 ''; ?>
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(' ', 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(',', narcissistic($i)); } // 记录运行结束时间 $end = getMicrotime(); // 输出运行时间 echo 'run time:'.(float)($end - $start); // 打印结果 echo '<pre class="brush:php;toolbar:false">'; print_r($result); echo ''; ?>
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!