Solución reto factorízame

Published 2/12/2008 11:59 | Eugenio Estrada

Solo hubo un participante y tuvo la misma solución que tenía yo:

private static ArrayList ObtenerMultiplos(ulong Numero)

{

    ArrayList al = new ArrayList();

    int aumentar = 4;

    if (Numero == 1)

        return null;

    if (Numero == 2 || Numero == 3)

    {

        al.Add(Numero);

        return al;

    }

    while (Numero % 2 == 0)

    {

        al.Add(2);

        Numero /= 2;

    }

    while (Numero % 3 == 0)

    {

        al.Add(3);

        Numero /= 3;

    }

    ulong factorial = 24;

    ulong i = 5;

    while ((i <= Math.Sqrt(Numero) + 1) && Numero != 1)

    {

        if (((factorial + 1) % i == 0) && (Numero % i == 0))//es primo y divisible por i

        {

            while ((Numero % i) == 0)

            {

                al.Add(i);

                Numero = Numero / i; //vamos añadiendo mientras sea divisible.

            }

        }

        else

        {

            if (aumentar == 2)

            {

                factorial = factorial * (i) * (i + 1) * (i + 2) * (i + 3);

                aumentar = 4;

            }

            else

            {

                factorial = factorial * (i) * (i + 1);

                aumentar = 2;

            }

        }

        i += (ulong)aumentar;

    }

    if (Numero > 1) al.Add(Numero);

    return al;

}

Que es la implementación del algoritmo de buscar múltiplos primos. El número a factorizar era 291634147032428 y tarda aproximadamente 270 ticks ;)

http://eugenioestrada.es/blog

Archivado en:
Comparte este post:

Comentarios

# David Daniel Arroyo Zari "Ddaz" said on December 2, 2008 8:23 PM:

no hubiera sido mas optimo usando listas genericas?? ... si, ya se que en el planteamiento del problema pedia array... pero igual pienso lo mismo....

salu2

Ddaz

# Eugenio Estrada said on December 2, 2008 9:42 PM:

En este caso no creo ya que para mover 3 elementos no creo que haya mucha diferencia de un ArrayList a usar un genérico, si los divisores primos fuesen muchos más si que podría ser determinante.

Saludos!