Comprobar si un número es primo

De Ejercicios

Contenido

Enunciado

El siguiente programa comprueba si un número es primo o no. Recuerda que un número primo es aquél que puede dividirse únicamente por sí mismo y por la unidad. Una manera de decidir si un número es primo o no, es dividirlo por todos los números comprendidos entre el 1 y su raíz cuadrada. Si se encuentra que el número es divisible por alguno de ellos, se deduce que ese número no es primo. Vamos a utilizar el operador módulo o resto de la división entera (%) para comprobar si la división es exacta. Este operador da como resultado el resto de la división del primer operando por el segundo. Por ejemplo, 5%2 es 1, puesto que el resto de dividir 5 entre 2 es 1. Guarda el programa con el nombre primos.c.

Soluciones

Programa en C por Angel

Solución comentada al Ejercicio:

 /* fichero primos.c */
 /* programa para determinar si un número es primo */
 #include <stdio.h>
 #include <math.h>
 void main(void) {
   int numero, divisor;
   printf("Que numero quieres saber si es primo?\n");
   scanf("%d", &numero);
   while(numero<2) {
      printf("Lo siento, no acepto numeros menores que 2.\n");
      printf("Intentalo de nuevo\n");
      scanf("%d", &numero);
   }
   for (divisor=2; divisor<=sqrt(numero); divisor++) {
      if (numero%divisor==0) {
         printf("%d no es primo.\n", numero);
         return;
      }
   }
   printf("%d es primo.\n", numero);
 }

Comentario

El comentario más apropiado para este ejercicio es el algoritmo para calcular el primo con el bucle for (divisor=2; divisor<=sqrt(numero); divisor++). Observa que este bucle se termina cuando se encuentra un divisor del número, en cuyo caso se escribe el mensaje de que el número no es primo y se termina la ejecución del programa con un return, o cuando divisor llega a su valor límite, en cuyo caso el número es primo porque no se ha encontrado ningún divisor.

Programa en Matlab

Solución con programación básica

%Programa NumeroPrimo
%Descripción: Comprueba si un número es primo o no.
%Entradas: valor a comprobar.
%Salidas: mensaje de "Es primo" o "No es primo".
%Variables:
%   num,div: ENTEROS
%   esprimo: LÓGICO
 
num=input('Introduzca un valor: ');
%Obtener el valor absoluto
if num<0
    num=-num;
end
%Comprobar el número introducido
switch num
    case 0
        disp('Se ha introducido un 0');
    case 1
        disp('Es primo');
    otherwise
        esprimo=true;
        for div=2:fix(sqrt(num))
            if rem(num,div)==0,
                esprimo=false;
            end
        end
        if esprimo==true
            disp('Es primo');
        else
            disp('No es primo');
        end
end

Solución con programación básica mejorada

Se sustituye el bucle for por uno de tipo while, para que el programa sea más rápido.

%Programa NumeroPrimo
%Descripción: Comprueba si un número es primo o no.
%Entradas: valor a comprobar.
%Salidas: mensaje de "Es primo" o "No es primo".
%Variables:
%   num,div,tope: ENTEROS
%   esprimo: LÓGICO
 
num=input('Introduzca un valor: ');
%Obtener el valor absoluto
if num<0
    num=-num;
end
%Comprobar el número introducido
switch num
    case 0
        disp('Se ha introducido un 0');
    case 1
        disp('Es primo');
    otherwise
        esprimo=true;
        div = 2;
        tope = fix(sqrt(num));
        while div<=tope && esprimo
            if rem(num,div)==0,
                esprimo=false;
            end
            div = div + 1;
        end
        if esprimo==true
            disp('Es primo');
        else
            disp('No es primo');
        end
end

Solución con programación Matlab avanzada

%Programa NumeroPrimo
%Descripción: Comprueba si un número es primo o no.
%Entradas: valor a comprobar.
%Salidas: mensaje de "Es primo" o "No es primo".
%Variables:
%   num,div: ENTEROS
%   esprimo: LÓGICO
 
num=input('Introduzca un valor: ');
%Obtener el valor absoluto
num = abs(num)
%Comprobar el número introducido
switch num
    case 0
        disp('Se ha introducido un 0');
    case 1
        disp('Es primo');
    otherwise
        esprimo = sum(rem(num,2:num-1)==0)==0
        if esprimo
            disp('Es primo');
        else
            disp('No es primo');
        end
end
Comentario

Para esta solución se han utilizado las siguientes funciones de Matlab:

  • abs: devuelve el valor absoluto de un número.
  • rem: devuelve el resto de dividir un número entre otro. En este ejemplo, se divide un número entre varios existentes en un array. La solución obtenida es un array con los restos.
  • sum: devuelve la suma de todos los elementos de un array.
Tipos de soluciones