C/Visual C - Divisores de un numero

 
Vista:

Divisores de un numero

Publicado por jorge (1 intervención) el 19/10/2005 12:52:27
Mi duda es la siguiente,
Debo realizar un algorismo que al leer un numero positivo y par, le muestre los divisores de éste... Hasta el momento llevo el siguiente codigo, pero no soy capaz de localizar donde está mi error, ya que el resultado no es el deseado.....

(Anteriormente ya he declarado las variables "num", "i" como enteros)

printf("Introduce un num positivo y par: ");
scanf("%i", num);

for (i=0; i<=num; i++){
if (num%2 == 0){
printf("Los divisores del numero %i son: %i", num, i);
}
else{
printf("%i no tiene divisores.", num);
}

¿Me puede ayudar alguien? Lo agradeceré muchisimo !!!

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Divisores de un numero

Publicado por fernando.gomez (1603 intervenciones) el 19/10/2005 18:48:28
Hola. Pues como lo que quieres son todos los divisores del número, tendrías que hacer lo siguiente, a mi parecer.

1. El número lo divides entre 2. Si su módulo es cero, entonces es divisible entre dos. En alguna lista donde llevarás la cuenta de los divisores (quizás un std::vector o std::list) insertarás el 2. Como 2 es divisor, al número original lo divides entre dos y te quedas con este. Si no es divisible entre dos, entonces te quedas con el número original.

2. Si el anterior número fué divisible entre dos, entonces el nuevo resultado verificas que también sea divisible entre dos. Si sí es divisible entre dos te saltas al paso 1. Si no lo es, te saltas al paso 3.

3. Divides el número actual (ya sea el original o el residuo de dividir entre dos) entre 3. Si el módulo es cero, entonces guardas el 3 en la lista, divides el número entre 3 y te quedas con el resultado de la división como nuevo número.

4. Si el anterior número fué divisible entre tres, repites el paso 3 (es decir, volver a verificar que sea divisible entre 3). Si no, te saltas al paso 5.

5. En general, si en el anterior paso dividiste entre n, ahora dividirás entre n+1. Si num%(n+1) == 0, entonces n+1 es divisor y lo guardas en tu lista de divisores, y repites el paso: es decir, vuelves a dividir entre n+1. Si no lo es, avanzas ahora a n+2.

6. Los pasos anteriores evidentemente se realizarán hasta que dividas entre el número original (y entonces el resultado será 1). Por ejemplo, para sacar los factores comunes de 81:

81 % 2 != 0, por lo que te pasas al siguiente número.
81%3 == 0, por lo que divides 81/3=27. Tu nuevo número es 27 y guardas el 3 en la lista.
27%3 == 0, por lo que divides 27/3=9. Tu nuevo número es 9, y guardas el 3 en la lista.
9%3==0, por lo que divides 9/3=3. Tu nuevo número es 3, y guardas el 3 en la lista.
3%3==0, por lo que divides 3/3=1. Tu nuevo número es 1 --aquí acaba el recorrido-- y guardas el 3 en la lista.

7. Una vez que se tienen todos los factores, entonces el número original es divisible entre cualquier producto de estos factores. Considerando el ejemplo anterior, nuestra lista consta de los siguientes números: 3,3,3,3, es decir, cuatro 3's. Entonces cualquier producto entre ellos es divisor de 81. Así, 3 es divisor, 3x3=9 también es divisor, 3x3x3=27 también es divisor y evidentemente, 3x3x3x3=81 también es divisor.

Otro ejemplo. Sea el número a dividir 70.

70%2==0, por lo que divides 70/2=35. Tu nuevo número es 35 y guardas el 2 en la lista.
35%2!=0, por lo que te pasas al siguiente número.
35%3!=0, por lo que te pasas al siguiente número.
35%4!=0, por lo que te pasas al siguiente número.
35%5==0, por lo que divides 35/5=7. Tu nuevo número es 7 y guardas el 5 en la lista.
7%5!=0, por lo que te pasas al siguiente número.
7%6!=0, por lo que te pasas al siguiente número.
7%7==0, por lo que divides 7/7=1. Tu nuevo número es 1, y guardas al 7 en la lista.
Como tu nuevo número es 1, ya no tiene más factores comunes.
Luego, 70 es divisible entre cualquier producto de 2,5,7 (aparte de los obvios:1 y 70). Pero 2x5=10, por lo que también es divisible entre 10. Además, 2x7=14, por lo que también es divisible entre 14. Además, 7x5=35, por lo que también es divisible entre 35.

Finalmente, para optimizar un poquito, en lugar de irte dividiendo entre 1,2,3,4,5..., lo que puedes hacer es irte de número primo en primo, osea, 1,2,3,5,7,11,13,17,23, etc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar