Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dailia__ en 16 Diciembre 2017, 23:47 pm



Título: cuantas veces es divisible
Publicado por: dailia__ en 16 Diciembre 2017, 23:47 pm
Hola, tengo que hacer un programa que descomponga un número en sus factores primos pero me piden que use una función que dándole dos números te diga cuantas veces puedes dividir ese número por el otro. o sea. si tengo 63, 63/3=21/3=7. puedo dividir el 63 entre 3 2 veces. Hice esa función y para comprobar si estaba bien la pasé a la main i se queda bloqueado y no entiendo el por qué, si veis el motivo, podríais ayudarme?
Gracias


Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. int main (void){
  4. int i, n, p;
  5. scanf ("%d",&n);
  6. scanf ("%d",&p);
  7. i=0;
  8. while (p<=n){
  9. if (n%p==0){
  10. n=n/p;
  11. i++;
  12. }
  13. }
  14. printf ("%d veces",i);
  15. getch();
  16. return 0;
  17. }
  18.  


Título: Re: cuantas veces es divisible
Publicado por: engel lex en 17 Diciembre 2017, 01:15 am
tu problema es que haces un while p<=n (cosa que aquí no es muy relevante) y un if tal que si es divisible divide, si no, simplemente queda en un loop infinito

en este caso en el while resumes el if

Código
  1. int cuenta = 0;
  2. a = 63;
  3. b = 3;
  4.  
  5. while(a%b==0){
  6.  a /= b;
  7.  cuenta++;
  8. }
  9.  
  10.  


Título: Re: cuantas veces es divisible
Publicado por: dailia__ en 17 Diciembre 2017, 04:26 am
tu problema es que haces un while p<=n (cosa que aquí no es muy relevante) y un if tal que si es divisible divide, si no, simplemente queda en un loop infinito

en este caso en el while resumes el if


La verdad es que tiene sentido, pensé que primero tenía que saber si era más pequeño, aunque bueno, si son divisibles entre si supongo que lo son sin más. muchas gracias


Título: Re: cuantas veces es divisible
Publicado por: engel lex en 17 Diciembre 2017, 04:38 am
no es necesario saber si es más pequeño ya que 62 no es multiplo de 2 ni viceversa sin importar quien es más grande, si, es un indicador, pero no muy preciso