Hola a todos, compañeros y amigos....después de un mes de intriga e incertidumbre, aquí llegamos con los resultados del 1º Reto PHP del Rincón de Tolito.
La participación ha sido bastante más alta de lo esperado...como podéis ver en los comentarios del reto (además de los que me lo habéis enviado al correo). Así que sin más preámbulos vamos a por los resultados.
PREMIO A LA BREVEDAD
Para Víctor con 63 caracteres:
function reto($n){for($i=$n;$i;$i--)($n%$i)||$a[]=$i;return$a;}
PREMIO A LA VELOCIDAD
Para Guti (al que quiero felicitar desde aquí por su blog, y por el algoritmo) con este algoritmo:
function reto($piNumero)
{
$aRes=array($piNumero);
for ($iDivisor=$piNumero>>1; $iDivisor>0; $iDivisor--)
{
if (!($piNumero % $iDivisor))
{
array_push($aRes, $iDivisor);
}
}
return($aRes);
}
VERSIÓN PROPIA
Yo, aunque no participo en el concurso, he desarrollado un algoritmo que, aunque no es la panacea, si que mejora infinitamente el tiempo de respuesta (en números grandes la mejora es muy notable). Lo que hace es recorrer el bucle for entre 0 y la raíz del número, con lo cual nos ahorramos muchas pasadas por el bucle, aquí os dejo el algoritmo desarrollado:
function reto($x)
{
$t=ceil(sqrt($x));
if ($t*$t==$x)
$d[]=$t;
for ($n=1;$n<$t;$n++)
{
if (!($x%$n))
{
$d[]=$n;
$d[]=$x/$n;
}
}
return $d;
}
Un saludo a todos
Nota: Guti ha enviado una versión que precalculaba las factorizaciones de todos los números indicados y los guardaba en un archivo (unos 500 Gb(para el rango de enteros de php) calcula él que ocuparía). Yo la verdad no tengo espacio en disco suficiente para probarlo (ni paciencia para generar el archivo que precalcula los datos), pero creo que la búsqueda de un número en un archivo de texto de 500 Gb no debe ser una cosa muy rápida.
Últimos Comentarios
hace 7 semanas 1 día
hace 8 semanas 20 horas
hace 8 semanas 2 días
hace 9 semanas 6 días
hace 12 semanas 4 días
hace 13 semanas 5 días
hace 14 semanas 16 horas
hace 14 semanas 2 días
hace 14 semanas 3 días
hace 15 semanas 15 horas