Numeros primos

Iniciado por Ander123, 30 Agosto 2012, 13:27 PM

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

Ander123

Hola tengo que descompones un numero y que muestre sus numeros primos, he provado en dividir entre un array de 10, pero supongo que no se hara asi, como hago para que lo divida entre las 9 posibilidades?

#include<stdio.h>

main()
{
   int n,d;
   d=((>=2)&&)<=9))
   printf("Introduzca un numero");
   scanf("%d",&n);
   while (n!=0)
   {
       if (n>0)
       {
            n%d==0;
            n/==d;
            printf("%d\n",n);
       }


   }
}

avesudra

#1
Hola Ander123 mira a ver si te he entendido , el array de diez que tu dices ¿es esto?:
d=((>=2)&&)<=9))
Así no se declara un array , es más es que no se que has hecho sinceramente :xD
Vamos a ver si quieres dividir un número por factores primos lo primero que debes tener es una lista de primos 2, 3 ,5 ,7,11 etc... pero eso tiene limitación pues la lista no puede ser infinita.Esa lista la podemos limitar a 10 números primos si te parece, así que declaramos un array de numeros enteros que se hace así:
int listaNumerosPrimos [9] = {2,3,5,7,11,13,17,19,23,29};//Pongo nueve pues la posición 0 también existe.
Ahora el código:
int numeroADescomponer;
printf("Introduzca un numero");
scanf("%d",&numeroADescomponer);
int i = 0;
while(i<=9) // Mientras i sea menor o igual que nueve recorremos el array y dividimos.
{
 if(numeroADescomponer%listaNumerosPrimos[i] == 0) //Si el numero a descomponer entre la lista de numeros primos en la  posición i , da de resto 0 es que es divisible , entonces imprimimos el numero de la lista y dividimos el numero a descomponer por el numero de la lista.No incrementamos i porque puede volver a ser divisible.
{
  printf("%d",listaNumerosPrimos[i]);
  numeroADescomponer/=listaNumerosPrimos[i];//Dividimos y asignamos numero a descomponer entre la lista de numeros primos.
}
else//Si no es divisible pues incrementamos i.
{
  ++i;
}
}

Creo que es entendible, por cierto , revisate los operadores de asignacion y comparación porque tienes un lío gordo:
n/==d;
Para dividir y asignar es /=
Otra cosa:
n%d==0;
Esto no tengo ni idea de que es , sinceramente.Las comparaciones las tienes que hacer con If's ,While's pero en medio del código no.
Otra cosa más utiliza nombres de variables que describan bien la funcion de cada una.Y una pregunta ¿Vienes de algun otro lenguaje de programación?
Regístrate en

Ander123

El programa no funciona bien.. algo le debe pasar, algo pasara con el array..

avesudra

Cita de: Ander123 en 30 Agosto 2012, 16:11 PM
El programa no funciona bien.. algo le debe pasar, algo pasara con el array..
No lo he probado la verdad , ahora lo pruebo y miro que es lo que está mal , pero aun así esos errores tenlos en cuenta  :)
Regístrate en

avesudra

#4
Estaba mal pues se ejecutaba el bucle mientras que i fuese menor o igual que nueve y era mientras que numeroADescomponer fuese mayor que uno, ahí te dejo el código.
#include<stdio.h>

int main (int argc , char *argv[])
{
   int numeroADescomponer;
   int listaNumerosPrimos [10] = {2,3,5,7,11,13,17,19,23,29};
   printf("Introduzca un numero: ");
   scanf("%d",&numeroADescomponer);
   int i = 0;
   while(numeroADescomponer>1) // Mientras numero a descomponer sea mayor que uno recorremos el array y dividimos.
   {
       if(numeroADescomponer%listaNumerosPrimos[i] == 0) //Si el numero a descomponer entre la lista de numeros primos en la  posición i , da de resto 0 es que es divisible , entonces imprimimos el numero de la lista y dividimos el numero a descomponer por el numero de la lista.No incrementamos i porque puede volver a ser divisible.
       {
           printf("%d * ",listaNumerosPrimos[i]);
           numeroADescomponer/=listaNumerosPrimos[i];//Dividimos y asignamos numero a descomponer entre la lista de numeros primos.
       }
       else//Si no es divisible pues incrementamos i.
       {
           ++i;
       }
   }
   printf("\b\b ");//Retrocedemos dos carácteres y imprimimos un espacio para borrar el * que queda.
   return 0;
}
Regístrate en

xiruko

CitarHola tengo que descompones un numero y que muestre sus numeros primos

hola, normalmente cuando se factoriza un numero ya se hace en numeros primos... asi que tu problema seria directamente factorizar cualquier numero? aqui te dejo otra manera de hacerlo que no usa una lista de numeros primos y asi el programa no esta limitado.


#include <stdio.h>

int EsPrimo(unsigned int n);

int main() {

unsigned int num, i;

printf("Ingresa el numero a descomponer: ");
scanf("%u", &num);

if (EsPrimo(num) > 0) {
printf("El numero introducido es primo y no se puede factorizar.\n");
return 0;
}

printf("Numero factorizado: ");
for (i=2; i<=num && num!=1; i++) {
if (num%i==0) {
printf("%u ", i);
num/=i;
i=1;
}
}
printf("\n");

return 0;
}

int EsPrimo(unsigned int n) {

unsigned int i;

for (i=2; i<n; i++)
if (n%i==0) return -1;

return 1;
}


espero que te sirva... un saludo!

leosansan

A lo breve y sin función, ya que creo no te has visto todavía ese tema:
#include <stdio.h>
int main()
{
    int N,i,j;
    printf ("Introduzca un numero:");
    scanf ("%d",&N);
    for (i=1;i<=N;i++)
        {
            if(N%i!=0) continue;
            printf("%d   ", i);
            N=N/i;
            i=1;
        }
    return 0;
}

Como ya te indicaron en el anterior post, se trata de factorizar y los factores son los divisores primos. Si sólo te sale 1 y el propio número es que el número es primo.
Saludos ..... y a ver en que foro te quedas .....