Ejercicio 8, parte b, práctico 7

Ejercicio 8, parte b, práctico 7

de Carlos Jose Rocha Spaolonzi -
Número de respuestas: 2

Buen día, estoy tratando de hacer la parte b del ejercicio que me pide números primos entre dos enteron n y m, realicé un código el cual no entiendo en que estoy fallando. Cuando ejecuto el programa con dos números enteros me devuelve TODOS los números entre esos valores y no sólo los que son primos como plantea el ejercicio, no se si es un problema de como plantee la función o si me falta algún término. Me pueden ayudar? Paso el programa :

program primos;
  var
    i,n,m:integer;

function esprimo(x:integer):boolean;
  var
   j:integer;

   primo:boolean;
   begin
     primo:=true;
     j:=2;
     while primo and (j<=sqrt(x)) do
       if n mod j = 0 then
          primo:=false
       else
          j:=j+1;

     esprimo:=primo
       end;
begin
   writeln('escriba dos numeros n y m');
   readln(n,m);
   for i:=n to m do
     if esprimo(i) then
        write(i);
end


En respuesta a Carlos Jose Rocha Spaolonzi

Re: Ejercicio 8, parte b, práctico 7

de Guillermo Rey Martusciello -
Buenas, fijate que en la funcion esprimo estas evaluando 'n mod j = 0' y n siempre es el mismo numero que te ingresaron al inicio, lo correcto seria evaluar 'x mod j = 0' ya que es x el numero a evaluar si es primo, el que va variando de n hasta m.

La otra cosa es que con el codigo asi estas imprimiendo tambien como primo al 0 y al 1, el 0 y el 1 no son primos. Podrias controlar esta condicion antes de entrar en el while de la funcion que te definiste, si el numero no es ninguno de estos, si haces el analisis que sigue, pero si es 0 o 1 ya sabes que no es primo.

Cualquier duda que te quede pregunta de nuevo, saludos!