factorización de un número

Iniciado por estudiante_1, 14 Enero 2016, 23:26 PM

0 Miembros y 1 Visitante están viendo este tema.

estudiante_1

Hola,  he hecho un programa que me factoriza un número. Me da error, y yo creo que el error está en dónde poner la función return.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

     int divide(int n,int divisores){
         divisores=2;
     while(n>=divisores){
        while(n%divisores==0){
            n=n/divisores;


        } divisores++;

     }

      return(divisores);
     }







     int main(void){
         int n,divisores;
     printf("dime el numero\n");
     scanf("%d",&n);
    printf("%d\n",divide(n,divisores));

     system("pause");
     return(0);

     }

MAFUS

A ver:

Presentas el código muy desordenado. Para ti, si haces pruebas y lo puedes entender sigue con él, pero cuándo vayas a presentarlo a más gente ordenalo. Sigue algunas reglas de estructuración. Sé coherente.

Por otra parte pasas como argumentos a las funciones variables que después resultan ser locales de la función.

Estos errores los vas repitiendo post tras post y creo que te los han a corregido numerosas veces.

fary

El código compila correctamente  :rolleyes: no sé que problema tienes con el...

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int divide(int n,int divisores)
{
   divisores = 2;
   while(n >= divisores)
   {
       while(n%divisores == 0)
       {
           n /= divisores;
       }
       divisores++;
    }
   return(divisores);
}

int main()
{
   int n,divisores;
   printf("dime el numero\n");
   scanf("%d",&n);
   printf("%d\n",divide(n, divisores));

   system("PAUSE");
   return(0);
}


Ordena el código porque eso que as puesto es un desastre, normal que no encuentres los errores.

saludos.
Un byte a la izquierda.

MAFUS

#3

#include <stdio.h>

unsigned divide(unsigned n) {
   unsigned divisores = 1;
   unsigned divisor = 2;

   while(n > 1) {
       if(n % divisor == 0) {
           n /= divisor;
           divisores++;
       }
       else
           divisor++;
    }
   return(divisores);
}

int main() {
   unsigned n;

   printf("Dime el número: ");
   scanf("%u", &n);
   printf("%d\n", divide(n));
   
   return 0;
}

Yoel Alejandro

Bueno, al margen de que todas las respuestas anteriores están muy bien y el programa corre perfectamente, tengo una pequeña pregunta respecto al propósito del problema.

¿Se trata de todos los divisores (enteros) del número, o sólo de los divisores primos?

Por ejemplo, probando el programa para el número 24 daría 4 divisores, a saber:

2, 2, 2, 3

Estos divisores así calculados serán primos, pero en realidad son sólo dos divisores distintos: 2 y 3. Faltarían las combinaciones:

1, 2, 3, 4, 6, 12, 24

Entonces, divisores distintos son 7 (5 si se excluyen la unidad y el propio 24), y primos son sólo 2. ¿Qué es lo que se quiere?
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)