Autor Tema: Primos  (Leído 3003 veces)

Desconectado Tania

  • Junior Member
  • **
  • Mensajes: 15
    • http://www.urbannoises.com
Primos
« en: 06 de Mayo de 2005, 04:43:59 pm »
Buenas!

Bueno, ya dije que tenia dudas pa aburrir, verdad? :) Pues aqui me teneis. Estaba estudiando y me puse a hacer un ejercicio.  Realizar un programa que solicite 50 numeros y calcule la media de los que sean primos.

Bien, aparentemente sencillo (para ovsotros fijo que si, pero a mi se me empieza a complicar).

Comienzo poco a poco...

#include <stdio.h>
main ()
{
int i, numero,contp=0,sumap=0,mediap=0;
for (i=0;i<=50;i++)
{
printf ("Introduce un numero: \n");
scanf ("%i", &numero);
}

==========
Bueno, hasta ahi lo que haria seria solicitar los 50 numeros y leerlos...  Por otra parte pienso... puedo crear una funcion que se llame primo, y llamar a la funcion despues de hacer el scanf. Si es primo lo sumo a sumap e incremento el contp en uno. Pero no se, de la manera en que lo estoy haciendo, como ponerlo. Si no lo hago con funciones, lo puedo continuar como lo estaba haciendo o voy mal encaminada?

Y perdon si lo que pregunto es una tonteria :(
Besos y gracias,
Tania

Desconectado BuHo

  • Pro Member
  • ****
  • Mensajes: 733
    • La Estancia Azul
Primos
« Respuesta #1 en: 06 de Mayo de 2005, 11:59:11 pm »
No esta mal pensado lo que tu dices.

En realidad, necesitarias un proceso que te dijera si un numero es primo o no.

Para eso, como supongo que el numero es pequeño, puedes probar a dividirlo por todos los numeros desde el 2 hasta el entero mas pequeño que la raiz cuadrada del numero en cuestion.

Por ejemplo:
Código: [Seleccionar]

int checkprimo ( int candidato)  {
int i=0;
for ( i=2; i< sqrt(candidato); i++)  {
    if (candidato%i==0)  {
                 return 1;
    }
}
return 0;
}



Si no he metido la pata mucho, eso te devolveria 0 si el candidato fuera primo y 1 en caso de no serlo.

Creo que no hace falta mucho mas.

Un saludo
Wake up BuHo...
Daboweb has you[/color]
Mi blog: La Estancia Azul

Desconectado Tania

  • Junior Member
  • **
  • Mensajes: 15
    • http://www.urbannoises.com
Primos
« Respuesta #2 en: 07 de Mayo de 2005, 12:20:08 am »
Uf, pues con lo de la raiz cuadrada me has dejado muerta :)

Desconectado BuHo

  • Pro Member
  • ****
  • Mensajes: 733
    • La Estancia Azul
Primos
« Respuesta #3 en: 07 de Mayo de 2005, 10:30:40 pm »
Ah, no te preocupes, es teoria de matematicas.

Si un numero tiene algun divisor, este se encontrara antes de la raiz cuadrada por una razon muy sencilla. Si el divisor se encontrase despues, el otro factor deberia estar antes ya que si no, el numero seria imposible de hallar. Ejemplo:

Numero 36.

Raiz: 6 ---> Luego 6*6 = 36.

Si encontrases algun divisor por encima de la raiz, por ejemplo, 9 (que es divisor), no podrias encontrar un numero mayor que 6 que al multiplicarlo por 9 diera 36, es decir, que el otro factor (4) lo habrias encontrado antes de la raiz. Ese es el motivo.

Otra cosa, para usar la raiz (  sqrt()  ), necesitas poner al principio

#include <math.h>

Si tienes mas dudas pregunta, no hay  problema.
Wake up BuHo...
Daboweb has you[/color]
Mi blog: La Estancia Azul

Desconectado Tania

  • Junior Member
  • **
  • Mensajes: 15
    • http://www.urbannoises.com
Primos
« Respuesta #4 en: 08 de Mayo de 2005, 12:22:29 pm »
Buho, muchisimas gracias por tu explicacion. Supongo que como acabo de iniciarme me habia descolocado ya lo de la raiz, asi, tan de repente :P En cualquier caso creo que más o menos lo he sacado a mi manera.

Programo una funcion (primo). Inicializo una variable a 2 (d) y mediante un while que incrementa la d en uno cada vez que lo ejecuto hasta encontrar un numero "d" que divida al numero qeu se quiere comprobar si es primo. El numero sera primo si el unico divisor encontrado es el propio numero.

La funcion seria...

//funcion primo
int primo (int n)
{
int d=2;
// los unicos primos son los que son divisibles
// por si mismos y por la unidad.
while ( n %d !=0) d++;
return (d==n);
}

Ahora ya solo me queda juntarlo todo! (que me llevara su tiempo :P)

Desconectado Tania

  • Junior Member
  • **
  • Mensajes: 15
    • http://www.urbannoises.com
Primos
« Respuesta #5 en: 08 de Mayo de 2005, 01:59:36 pm »
Ya lo termine!

Ha sido más facil de lo que imaginaba :)



Muchas gracias por vuestra ayuda! :)

Desconectado BuHo

  • Pro Member
  • ****
  • Mensajes: 733
    • La Estancia Azul
Primos
« Respuesta #6 en: 09 de Mayo de 2005, 02:05:10 am »
De nada ;)
Wake up BuHo...
Daboweb has you[/color]
Mi blog: La Estancia Azul

 

Aviso Legal | Política de Privacidad | Política de Cookies

el contenido de la web se rige bajo licencia
Creative Commons License