Calculo de números primos

De Ejercicios


Contenido

Enunciado

Basándote en el ejercicio Comprobar si un número es primo, realiza un programa que imprima todos los números primos comprendidos entre el 2 y un valor límite que se preguntará al ejecutar el programa.

Soluciones

Programa en C por Angel

Solución comentada del Ejercicio:

 /* fichero primos1.c */
 #include <stdio.h>
 void main(void) {
   int numero, divisor;
   int n;
   printf("¿Hasta qué número desea conocer los primos?\n");
   printf("Introduzca el valor: ");
   scanf("%d", &n);
   for (numero=2; numero<=n; numero++) {
      esPrimo=1; /* numero es primo */
      for (divisor=2; divisor<=sqrt(numero); divisor++){
         if (numero%divisor==0){
            esPrimo=0;
            break;
         }
      }
      if(esPrimo==1) printf("%d\n", numero);
   }
 }

Comentario

Para poder escribir todos los números primos hasta un límite, basta introducir un nuevo bucle for al programa anterior que vaya recorriendo todos los números enteros desde el 2 hasta dicho límite inclusive. En cada ejecución del bucle se comprueba si el número considerado es primo aprovechando las sentencias del programa anterior. En este caso se calcula si un número es primo mediante el bucle for (divisor=2; divisor<=sqrt(numero); divisor++). Observa que se ha definido una variable esPrimo que indica si el número es primo o no. Al principio se supone que el número es primo, y esta condición se cambia si se encuentra un divisor exacto. En esta caso, la sentencia break hace que se termine el bucle for más interno.

Solucion en Pseudocódigo

 ALGORITMO primos1
 ENTRADAS:
    n: ENTERO (* Valor límite *)
 SALIDAS:
    numero: ENTERO
 VARIABLES
    divisor: ENTERO
 INICIO
 
   ESCRIBIR "¿Hasta qué número desea conocer los primos?"
   ESCRIBIR SaltoDeLinea
   ESCRIBIR "Introduzca el valor: "
   LEER n
   PARA numero<--2 HASTA n HACER
      esPrimo<--1 (* numero es primo *)
      divisor<--2
      MIENTRAS divisor<=RAIZ(numero) Y esPrimo=1 HACER
        SI (numero MOD divisor) = 0 ENTONCES
           esPrimo<--0;
        FIN_SI
      FIN_MIENTRAS
      SI esPrimo=1 ENTONCES
          ESCRIBIR numero
          ESCRIBIR SaltoDeLinea
      FIN_SI
   FIN_PARA 
 FIN

Comentario

En la creación del pseudocódigo a partir del código en C mostrado en el apartado anterior hemos realizado algunas sustituciones para que el pseudocódigo fuera correcto. El bucle for más interno ha sido sustituido por una sentecia MIENTRAS, ya que en el código C dicho bucle estaba siendo utilizado como una sentencia MIENTRAS. Además en el diseño en pseudocódigo no es recomendable incluir sentencias de ruptura de flujo como break, por lo que se ha simulado su comportamiento incluyendo en la condición del MIENTRAS la comparación esPrimo=1. Por último, se ha utilizado la función ficticia RAIZ(numero) como si ya estubiera declarada anteriormente.

Programa en Matlab

%Programa Primos1
%Descripción: Nos localiza los números primos entre el 2 y el número que queramos.
%Entradas: El valor límite hasta el que queremos analizar.
%Salidas: Los números primos.
%Variables:
%   n, numero, divisor: ENTEROS;
 
n=input('Introduzca hasta que número desea buscar: ');
disp('Primos contenidos:');
for numero=2:n,
    divisor=2;
    while rem(numero,divisor)~=0,
        divisor = divisor + 1;
    end
    if numero==divisor,
        disp(numero);
    end
end
Tipos de soluciones