#include <stdio.h>
#include <stdlib.h>
int esprimo(int n);
int main()
{
long *pm;
int numfilas,numcols, i,j, numero;
//Leemos cuántas filas tiene la matriz
printf("Indique cuántas filas tiene: ");
scanf("%d",&numfilas);
//Leemos cuántas columnas tiene la matri<
printf("Indique cuántas columnas tiene: ");
scanf("%d",&numcols);
/*Reservamos espacio para la matriz */
// Tiene numfilas*numcols números de tipo long
pm=(long*)malloc(sizeof(long)*numfilas*numcols);
numero=1;
//Inicializamos los valores de la matriz
i=0;
while(i<(numfilas*numcols))
{
if (esprimo(numero)==1) {
*(pm+i)=numero;
i++;
}
numero++;
}
//Imprimimos el resultado
for (i=0;i<numfilas;i++)
{
for (j=0;j<numcols;j++)
printf("%li\t",*(pm+(i*numcols)+j));
printf("\n");
}
//liberamos memoria
free (pm);
return 0;
}
//Función que indica si el número que se le pasa como parámetro es primo
//Devuelve 1 si es primo y 0 si no lo es
int esprimo(int n)
{
int i,primo;
//Si el argumento es menor que 1, devuelve 0
if (n<1)
primo=0;
else
{
//Si el argumento es 1, devuelve que es primo
if(n==1)
primo=1;
else
{
//Si el argumento es mayor que 1, comprueba si es primo
primo=1;
i=n-1;
//Desde n-1 hasta 2 divide el número entre dichos valores
while(i>1)
{
if((n%i)==0)
{
primo=0; //Si el resto es 0, el número no es primo
i=1; //Así sale del bucle
}
i--; //Seguimos mirando
}
}
}
return(primo);
}