Todos los números que se dividen de manera uniforme en x.La mejor manera de encontrar todos los factores de un número determinado
puse en 4 vuelve: 4, 2, 1
edición: Sé que suena homeworky. Estoy escribiendo una pequeña aplicación para completar algunas tablas de productos con datos de prueba semialeatorios. Dos de las propiedades son ItemMaximum y Item Multiplier. Necesito asegurarme de que el multiplicador no cree una situación ilógica donde comprar 1 artículo más pondría la orden por encima del máximo permitido. Por lo tanto, los factores darán una lista de valores válidos para mis datos de prueba.
edición ++: Esto es lo que fui con toda la ayuda de todos. ¡Gracias de nuevo!
Editar #: Escribí 3 versiones diferentes para ver cuál me gustaba más y las comprueve contra factorizar números pequeños y números muy grandes. Pegaré los resultados.
static IEnumerable<int> GetFactors2(int n)
{
return from a in Enumerable.Range(1, n)
where n % a == 0
select a;
}
private IEnumerable<int> GetFactors3(int x)
{
for (int factor = 1; factor * factor <= x; factor++)
{
if (x % factor == 0)
{
yield return factor;
if (factor * factor != x)
yield return x/factor;
}
}
}
private IEnumerable<int> GetFactors1(int x)
{
int max = (int)Math.Ceiling(Math.Sqrt(x));
for (int factor = 1; factor < max; factor++)
{
if(x % factor == 0)
{
yield return factor;
if(factor != max)
yield return x/factor;
}
}
}
In ticks. cuando se toma el número 20, 5 veces cada uno:
- GetFactors1-5,445,881
- GetFactors2-4,308,234
- GetFactors3-2,913,659
cuando se toma el número 20000, 5 veces cada uno:
- GetFactors1-5,644,457
- GetFactors2-12,117,938
- GetFactors3-3,108,182
Usted sabe, espero, que no existe una solución general de alto rendimiento conocida por su problema. La criptografía moderna se basa en que no existe tal solución. –
Sí, pero no estaba seguro de si había una forma mejor de hacerlo que simplemente probando los números uno por uno, ha pasado un tiempo desde que asistí a una clase de matemáticas. – Echostorm
pregunta relacionada en [python] (http://stackoverflow.com/q/3643725/6899) – tzot