Solución reto factorízame
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 ;)