Pascal/Turbo Pascal - recursivo de numeros primos

 
Vista:

recursivo de numeros primos

Publicado por Gilbert (3 intervenciones) el 17/06/2007 01:58:04
Hola. Hice un programa en pascal que lleva una función recusriva para calcular si un número es primo pero tengo un problema, me dice que el número 2 no es primo y q el número 9 sí lo es, quien pueda por favor digame q puedo hacer para q funcione. Gracias!
Esta es la funcion q hice:

function primo (n: integer): boolean;
var
i:integer;
begin
i:=2;
primo:= true;
if n mod i = 0 then
primo:= primo (n-1);
if n = 1 then
primo:= false;
end;

Tambien intenté con esta función y tambien sigue el mismo problema

function primo (n: integer): boolean;
var
i:integer;
begin
i:=2;
primo:= true;
if n mod i = 0 then
begin
primo:= primo (n-1);
primo:= false;
end;
end;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE: recursivo de numeros primos

Publicado por David (7 intervenciones) el 17/06/2007 13:35:04
Hola Gilbert!

Bueno, llevo un rato viendo tu programa y he llegado a la conclusión de que no tiene ningún problema puntual sino que en general no es correcto, me explico:
¿Por qué divides siempre entre 2? ¿Al llamarse dentro de la función a si misma por qué le pasas el valor n-1?

En definitiva, no entiendo el algoritmo que utilizas. No sé si te servirá pero aqui te dejo una función (no recursiva) para averiguar si un número es primo o no.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNCTION PRIMO(n: INTEGER):BOOLEAN;

VAR
contador, i: INTEGER;

BEGIN
contador:=0; i:=1; PRIMO:=true;

WHILE (i <= n) DO
BEGIN
IF ((n MOD i) = 0) THEN INC(contador);
INC(i);
END;

IF (contador > 2) THEN primo:=FALSE;

END; {FIN_PRIMO}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: recursivo de numeros primos

Publicado por Alexis (44 intervenciones) el 17/06/2007 21:01:26
Yo lo que haría es lo siguiente:

procedure primo (n: integer);
for i=2 to n-1 do
begin
primo=n/i;
if frac(primo)=0 then
d=d+1;
end;
if c>0 then
write (n, 'No es primo');
else
write (n, 'Es primo');

puedes incluirle una variable de tipo boolean si quieres....
espero que te sirva...

P.D.: Se supone que se tiene q inicializar la variable d en cero...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: recursivo de numeros primos

Publicado por Alexis (44 intervenciones) el 17/06/2007 21:09:29
Disculpa en la parte donde se pregunta:
if c > 0
debe ir
if d > 0

estaba un poco apurado....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: recursivo de numeros primos

Publicado por Gilbert (3 intervenciones) el 17/06/2007 23:40:03
Gracias Masters creo que si me va a servir de algo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar