Numeros primos con punteros en C

#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);
}