Algoritmo para calcular numeros primos

01/02/2006 - 19:18 por Álvaro José | Informe spam
Pues estuve intentando hacerlo y buscando por internet, pero no encuentro el
código, y si lo encuentro lo encuentro para C++ y no se ese lenguaje.

Pues bien, necesito que me ponga en un ListBox los numeros primos que se
encuentren entre 1 y un numero a elección del usuario.

Lo intente pero cada vez que lo intento o me saca los numeros pares, o me
saca los impares o solo me muestra el 0.

Espero que me podais ayudar.

Gracias.

Salu2.

Preguntas similare

Leer las respuestas

#1 Marcelo Soria
01/02/2006 - 19:47 | Informe spam
Lo que podés hacer es codificar el algoritmo que representa la Criba de
Eratostenes, es el único que puedo recomendarte (porque es el unico que
conozco :D )

es más o menos así, en pseudocodigo
i=nro elegido por el usuario
A={2,3,...,i}
indice=0
n=A[indice]
mientras indice<A .Largo() (*)
borrar todos los multiplos de n del Vector A;
indice++;
Mostrar todos los elementos de A

(*) se puede optimizar esta condicion, si queres lo discutimos

"Álvaro José" escribió en el mensaje
news:#
Pues estuve intentando hacerlo y buscando por internet, pero no encuentro


el
código, y si lo encuentro lo encuentro para C++ y no se ese lenguaje.

Pues bien, necesito que me ponga en un ListBox los numeros primos que se
encuentren entre 1 y un numero a elección del usuario.

Lo intente pero cada vez que lo intento o me saca los numeros pares, o me
saca los impares o solo me muestra el 0.

Espero que me podais ayudar.

Gracias.

Salu2.


Respuesta Responder a este mensaje
#2 Guillermo Peralta
01/02/2006 - 19:57 | Informe spam
Hola Alvaro...
Apenas comienzo con C#, pero sé que alguna vez realice este algoritmo en C,
lamentablemente no lo tengo a mano, asi que modifique uno que encontre por
la red para adaptarlo, espero que te sirva.. no se si sera lo más optimo,
pero creo que funciona bien

En un formulario he colocado un listbox (lstNros), una caja de texto
(txtNro) y un boton de comando y el codigo es el siguiente:
private void button1_Click(object sender, EventArgs e)

{

int i = 1;

for (i = 1; i<= Convert.ToInt32 (txtNro.Text) ;i++)

{

if ( i == 1 || i== 2 || EsPrimo(i) == true )

{

lstNros.Items.Add (i) ;

}

}

}

public bool EsPrimo(int nro)

{

int i = 1;

int var = 0;

for (i = 1; i< nro - 1; i++)

{

if (nro % i == 0)

{

var ++;

}

}

if (var == 1)

return true;


else

return false;


}


Saludos
Guillermo

"Álvaro José" escribió en el mensaje
news:%
Pues estuve intentando hacerlo y buscando por internet, pero no encuentro
el código, y si lo encuentro lo encuentro para C++ y no se ese lenguaje.

Pues bien, necesito que me ponga en un ListBox los numeros primos que se
encuentren entre 1 y un numero a elección del usuario.

Lo intente pero cada vez que lo intento o me saca los numeros pares, o me
saca los impares o solo me muestra el 0.

Espero que me podais ayudar.

Gracias.

Salu2.

Respuesta Responder a este mensaje
#3 Álvaro José
01/02/2006 - 20:49 | Informe spam
Muchas gracias... por fin lo he solucionado gracias a vuestros consejos y
codigos...

Llevo muy poco en C# y por ahora estoy aprendiendo y me costaba
desarrollarlo.

Salu2






"Guillermo Peralta" escribió en el
mensaje news:
Hola Alvaro...
Apenas comienzo con C#, pero sé que alguna vez realice este algoritmo en
C, lamentablemente no lo tengo a mano, asi que modifique uno que encontre
por la red para adaptarlo, espero que te sirva.. no se si sera lo más
optimo, pero creo que funciona bien

En un formulario he colocado un listbox (lstNros), una caja de texto
(txtNro) y un boton de comando y el codigo es el siguiente:
private void button1_Click(object sender, EventArgs e)

{

int i = 1;

for (i = 1; i<= Convert.ToInt32 (txtNro.Text) ;i++)

{

if ( i == 1 || i== 2 || EsPrimo(i) == true )

{

lstNros.Items.Add (i) ;

}

}

}

public bool EsPrimo(int nro)

{

int i = 1;

int var = 0;

for (i = 1; i< nro - 1; i++)

{

if (nro % i == 0)

{

var ++;

}

}

if (var == 1)

return true;


else

return false;


}


Saludos
Guillermo

"Álvaro José" escribió en el mensaje
news:%
Pues estuve intentando hacerlo y buscando por internet, pero no encuentro
el código, y si lo encuentro lo encuentro para C++ y no se ese lenguaje.

Pues bien, necesito que me ponga en un ListBox los numeros primos que se
encuentren entre 1 y un numero a elección del usuario.

Lo intente pero cada vez que lo intento o me saca los numeros pares, o me
saca los impares o solo me muestra el 0.

Espero que me podais ayudar.

Gracias.

Salu2.





Respuesta Responder a este mensaje
#4 Manuel Gomez
02/02/2006 - 09:40 | Informe spam
Álvaro José en las news de microsoft.public.es.csharp dijo:

Pues estuve intentando hacerlo y buscando por internet, pero no encuentro
el código, y si lo encuentro lo encuentro para C++ y no se ese lenguaje.

Pues bien, necesito que me ponga en un ListBox los numeros primos que se
encuentren entre 1 y un numero a elección del usuario.

Lo intente pero cada vez que lo intento o me saca los numeros pares, o me
saca los impares o solo me muestra el 0.

Espero que me podais ayudar.

Gracias.

Salu2.


L
a parte del LISTBOX es la mas chorra y te la dejo para que te entretengas
con listbox.add o algo así era (no quiero mirar el manual)

Este método es para que subas nota y el más rápido que conozco para calcular
si un número es primo o no.

Todo número no primo es divisible por él y también por su raíz cuadrada.
Ejs:
sqrt(1.000.000= 1.000
entre los 1.000 primeros números de N esta su divisor.
sqrt(4) = 2
entre los 2 primeros números de N esta su divisor.
sqrt(12) = 3.464101615137754587 entre los 3 primeros números de N esta su
divisor
etc..


public bool primo (int num) {
bool ret_primo = true;
int limit = 0, i = 1; // i = 1 porque i € N
limit = (int) Math.sqrt(num); // Aquí lee el manual de conversión de tipos
de double a int. CUIDADO CON LOS NÚMEROS NEGATIVOS. También paso de mirar
el manual para conversión de tipos.
while ( (num % i != 0) && (i <= limit) { i++; }
if (i != limit && i > 3) primo = false;
return ret_primo;
}
Respuesta Responder a este mensaje
#5 \(\)\(\)\(\)\(\)o: Nuevito
02/02/2006 - 20:37 | Informe spam
HOLa..
YO trabaje un algoritmo para una tarea una vez,
lamentablemente en esa ocacion lo realice en Lenguaje JAVA.
aqui te paso mi codigo para ver si te es util... es codigo JAVA.
pero visto que C# es una evolucion a partir de Java y C++ creo que
te sera familiar y facil de leer.. luego lo implemtentas utilizanod
componentes
de C#. bueno, la logica del arlgoritmo debe ser la misma..

NOTA..
presta epecial atencion al metodo llamado "esPrimo" ahi es donde
se encuentra el algoritmo que te retorna un balor True o False, para saber
si un numero de los evaluados es primo o no.

Salu2
()()()()o: Nuevito

// Fuente: Metodos2.java
// Por ()()()()o: Nuevito 09/09/2005
// Victor Manuel Montoya Guardado

import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;

public class Metodos2
{
public static void main(String args[])
{
int numero;
String sNumero;
String primo;
String out = "Numero\tEsPrimo";

JTextArea areaOut = new JTextArea(10,10);
JScrollPane scrollOut = new JScrollPane(areaOut);

do
{
sNumero = JOptionPane.showInputDialog("Ingresar Numero, " +
"Cero para Fin: ");
numero = Integer.parseInt(sNumero);

if(numero > 0)
{
if(Metodos2.esPrimo(numero) == true)
primo = "Si";
else
primo = "No";

out += "" + numero + "\t" + primo;
} //Fin if(numero > 0)
else
out += " Fin ";
} while(numero >0);

areaOut.setText(out);
areaOut.setEditable(false);

JOptionPane.showMessageDialog(null,scrollOut,"Resultado",
JOptionPane.PLAIN_MESSAGE);

System.exit(0);
} //Fin metodo main

public static boolean esPrimo(int n)
{
boolean p = false;

if(n < 4)
p = true;
else
{
if(n%2 == 0)
p = false;
else
{
int divOk = 0;
int a = 1;
int lim = (n-1) / 2;

if(lim%2 == 0)
lim--;

while(a <= lim)
{
if(n%a == 0)
divOk++;

a += 2;

if(divOk == 2)
a = lim + 1;
} //Fin while(a <= lim)

if (divOk == 1)
p = true;
} //Fin else
} //Fin else
return (boolean) p;
} //Fin metodo esPrimo
} //Fin class Metodos2
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida