Go Back   Champions of Regnum > Español > La Taberna

La Taberna Un lugar para conversar sobre casi cualquier tema

Reply
 
Thread Tools Display Modes
Old 11-04-2014, 06:59 PM   #1
HALFWAY
Master
 
HALFWAY's Avatar
 
Join Date: Dec 2008
Location: Herbred
Posts: 252
HALFWAY is on a distinguished road
Default Ayuda informática

Buenas a todos;

El profesor de informática de mi facultad nos asignó un problema que consistía en escribir un programa en C que, dado un número n por el usuario, imprimiera en pantalla nos n primeros números primos; por ejemplo, si el usuario teclea el número 5, aparecerían en pantalla los números 2,3,5,7,11 que son los 5 primeros números primos.

Bien, yo he escrito un código que creo debería funcionar, pero parece que el ordenador no cree lo mismo entonces sería de gran ayuda que alguien me dijera que está fallando o que error estoy cometiendo; les dejo el código:

-----------------------------------------------------

#include<stdio.h>

int main()

{
int x=3; //numero de inicio para ir obteniendo los primos
int d=2; //divisor (que ira aumentando de 1 en 1)
int n; //numero de primos que el usuario quiere
int c=1; //contador de primos

printf("Introduzca la cantidad de numeros primos que desea: ");
scanf("%d", &n);

if(n==0) printf("No hay numeros primos");
if(n==1) printf("2 \n");
if(n>1)
{
printf("2 \n");
while(c!=n)
{
while(x%d!=0 && x>=d)
{
if(x%d!=0 && x==d-1) printf("%i \n", x);
else d=d+1;
}

if(x%d==0) c=c;
else c=c+1;
x=x+1;
}
printf("fin");
}
system("pause");
}


Muchas gracias!!
__________________
COPENHAGEN
Jamming
HALFWAY no ha iniciado sesión   Reply With Quote
Old 11-04-2014, 08:45 PM   #2
jamce
Apprentice
 
Join Date: Mar 2010
Location: Algasborg
Posts: 50
jamce is on a distinguished road
Default

este esta mas claro
Code:
#include <stdio.h>

int main() {
    int primos_por_mostrar, posible_primo, divisor;
    int es_primo;

    printf("Cuantos primos desea mostrar: ");
    scanf("%d", &primos_por_mostrar);

    posible_primo = 2;
    while (primos_por_mostrar > 0) {

        /* determinar si posible_primo es primo */
        es_primo = 1; /* true */
        for (divisor = 2; divisor < posible_primo; ++divisor) {
            if (posible_primo % divisor == 0) {
                es_primo = 0; /* false */
                break;
            }
        }

        /* mostrar el numero
         * y actualizar el contador */
        if (es_primo) {
            printf("%d ", posible_primo);
            primos_por_mostrar--;
        }
        posible_primo++;
    }

    printf("\n");
    return 0;
}
fuente: http://progra.usm.cl/apunte/c/numeros-primos.html
jamce no ha iniciado sesión   Reply With Quote
Old 11-04-2014, 08:56 PM   #3
alepk
Initiate
 
Join Date: Jul 2008
Posts: 160
alepk is on a distinguished road
Default

en c es asi,


#include<stdio.h>

int main()

{
int x=3; //numero de inicio para ir obteniendo los primos
int d=2; //divisor (que ira aumentando de 1 en 1)
int n; //numero de primos que el usuario quiere
int c=1; //contador de primos

printf("Introduzca la cantidad de numeros primos que desea saber: \n");
scanf("%d",&n);


if(n==0) printf("No hay numeros primos");
if(n==1) printf("El numero primo es: 2 ");
if(n>1)
{
printf("Los numeros primos son : 2-");
while(c!=n)
{
if(x%d!=0){ printf("%d-", x);c++;}
x=x+1;
}
printf("fin");
}

}

estabas complicandote de mas, solo necesitas un bucle que corte cuando encontras la cantidad pedida, y el if que verifique que sean primos, te los muestre y sume al contador y aumentar x en el bucle! si tenes alguna duda mandame mp!
alepk no ha iniciado sesión   Reply With Quote
Old 11-04-2014, 09:53 PM   #4
HALFWAY
Master
 
HALFWAY's Avatar
 
Join Date: Dec 2008
Location: Herbred
Posts: 252
HALFWAY is on a distinguished road
Default

Quote:
Originally Posted by alepk View Post
en c es asi,


#include<stdio.h>

int main()

{
int x=3; //numero de inicio para ir obteniendo los primos
int d=2; //divisor (que ira aumentando de 1 en 1)
int n; //numero de primos que el usuario quiere
int c=1; //contador de primos

printf("Introduzca la cantidad de numeros primos que desea saber: \n");
scanf("%d",&n);


if(n==0) printf("No hay numeros primos");
if(n==1) printf("El numero primo es: 2 ");
if(n>1)
{
printf("Los numeros primos son : 2-");
while(c!=n)
{
if(x%d!=0){ printf("%d-", x);c++;}
x=x+1;
}
printf("fin");
}

}

estabas complicandote de mas, solo necesitas un bucle que corte cuando encontras la cantidad pedida, y el if que verifique que sean primos, te los muestre y sume al contador y aumentar x en el bucle! si tenes alguna duda mandame mp!
Macho eres un genio

Muchisimas gracias a los 2, me quedo con el de alepk porque me pareció mas sencillo el código, ahí te mando un mp preguntandote 2 cositas.

Gracias!
__________________
COPENHAGEN
Jamming
HALFWAY no ha iniciado sesión   Reply With Quote
Old 11-04-2014, 11:01 PM   #5
Gdragonoid
Initiate
 
Gdragonoid's Avatar
 
Join Date: Nov 2012
Location: Zona de Guerra
Posts: 222
Gdragonoid is on a distinguished road
Default

y el regnum? donde esta el regnum en todo esto?? jajaj XD
__________________
Dj Drago Caza Esquelio 60 - Gdragonoid Brujo Esquelio 53
Gdragonoid no ha iniciado sesión   Reply With Quote
Old 11-05-2014, 01:18 PM   #6
andres81
Count
 
Join Date: Sep 2008
Posts: 1,690
andres81 is on a distinguished road
Default

Lo cuestión es siempre que pretende el ejercicio. Se busca cualquier solución que funcione o se busca una solución eficaz?

Lo que están haciendo con los codigos de arriba es probar una por una todos los numeros hasta n si son primos o no. Ya se pueden imaginar que este algoritmo no anda muy rapido. La otra solución clasica sería esa http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes que trabaja más rapido pero requiere más memoria y a parte de esos dos existen varios algoritmos más modernos y obviamente mas rapidos en el calculo pero tambien algo mas complejos
andres81 no ha iniciado sesión   Reply With Quote
Old 11-05-2014, 02:05 PM   #7
HALFWAY
Master
 
HALFWAY's Avatar
 
Join Date: Dec 2008
Location: Herbred
Posts: 252
HALFWAY is on a distinguished road
Default

Quote:
Originally Posted by andres81 View Post
Lo cuestión es siempre que pretende el ejercicio. Se busca cualquier solución que funcione o se busca una solución eficaz?

Lo que están haciendo con los codigos de arriba es probar una por una todos los numeros hasta n si son primos o no. Ya se pueden imaginar que este algoritmo no anda muy rapido. La otra solución clasica sería esa http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes que trabaja más rapido pero requiere más memoria y a parte de esos dos existen varios algoritmos más modernos y obviamente mas rapidos en el calculo pero tambien algo mas complejos
Tambien pense en la famosa criba, pero yo le veo un problema. Segun tengo entendido la criba trabaja encontrando numeros primos en un intervalo, ej del 1 al 100. Por eso, el programa tendria que definir un intervalo dependiendo de la n que introdujera el usuario, con el consiguiente riesgo de quedarnos cortos o de que haya desbordamiento de memoria, ya que la distancia entre numeros primos no es constante ni verifica ninguna ecuacion conocida. Quiza este equivocado, pero es por eso que descarte esa opcion.
__________________
COPENHAGEN
Jamming
HALFWAY no ha iniciado sesión   Reply With Quote
Old 11-05-2014, 02:21 PM   #8
andres81
Count
 
Join Date: Sep 2008
Posts: 1,690
andres81 is on a distinguished road
Default

Quote:
Originally Posted by HALFWAY View Post
Tambien pense en la famosa criba, pero yo le veo un problema. Segun tengo entendido la criba trabaja encontrando numeros primos en un intervalo, ej del 1 al 100. Por eso, el programa tendria que definir un intervalo dependiendo de la n que introdujera el usuario, con el consiguiente riesgo de quedarnos cortos o de que haya desbordamiento de memoria, ya que la distancia entre numeros primos no es constante ni verifica ninguna ecuacion conocida. Quiza este equivocado, pero es por eso que descarte esa opcion.
Depende, si lo programas para un miniprocesador encapsulado en alguna maquina y con memoria muy restringida puede ser un problema... en una compu normal es dificil llegar a ese extremo porque hablamos simplemente de crear un array[2..n] del tipo boolean o sea 2 bits (sí o no) con la cantidad total de (n-1). Además puedes reducir la memoria a la mitad si solo guardas los numeros impares en el array porque los pares no pueden ser primos ya que se pueden dividir por 2.
No se en que cantidad para n piensas pero si usas tal numero que hace llenar la memoria de una compu el primer algoritmo de probar cada numero tardaria cientos o miles de años en terminar jaja
andres81 no ha iniciado sesión   Reply With Quote
Old 11-07-2014, 08:07 PM   #9
alepk
Initiate
 
Join Date: Jul 2008
Posts: 160
alepk is on a distinguished road
Default

como ya le avise por mp al creador del post en mi programa fuente me comí un for, acá esta corregido por si alguno mas le interesa




#include<stdio.h>

int main()

{
int x=3; //numero de inicio para ir obteniendo los primos
int d=2; //divisor (que ira aumentando de 1 en 1)
int n; //numero de primos que el usuario quiere
int c=1; //contador de primos

printf("Introduzca la cantidad de numeros primos que desea saber: \n");
scanf("%d",&n);


if(n==0) printf("No hay numeros primos");
if(n==1) printf("El numero primo es: 2 ");
if(n>1)
{
printf("Los numeros primos son : 2-");
while(c!=n)
{

if(x%d!=0){
for(d=2;d<x;d++){
if(x%d==0){x++;d=2;}}
printf("%d-", x);c++;}


x=x+1;
}
printf("fin");
}

}
alepk no ha iniciado sesión   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 03:23 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
NGD Studios 2002-2024 © All rights reserved