# Encuentra n números capicua primos

palprim <- function(n=10) {
  
  esprimo <- function(n) {
    
    if (n > .Machine$integer.max) {
      cat("El número excede la capacidad\n")
      return(NULL)
    }
    
    if (n==1 || n==2) return(T)
    
    return(all(n %% (2:sqrt(n)) != 0))
  }
  
  invertir <- function(n) {
    cifra <- 0  ## Contará el nº de cifras de n
    vinvertido <- vector() # Vector que contendrá el número invertido
    while(n > 0) {
      cifra <- cifra + 1 # Empieza a contar cifras
      vinvertido[cifra] <- n %% 10 # Extrae la última cifra y la guarda
      n <- trunc(n / 10) # Elimina la última cifra del número 
    }
    
    potencia <- 10 ^ (length(vinvertido) - 1) # 1 si tiene una cifra, 10 si tiene 2, 100 si tiene 3, etc. Se usará para reconstruir el número invertido
    invertido <- 0
    
    for (x in vinvertido) {
      invertido <- invertido + potencia * x # Comienza la reconstrucción del nº invertido comenzando por el número más alto
      potencia <- potencia / 10
    }
    return(invertido)
  }
  
  num <- 0
  i <- 0
  res <- vector()
  while(i < n) {
    num <- num + 1
    if (invertir(num) == num) {
      if(esprimo(num)) {
        i <- i + 1
        res[i] <- num
        
      }
    }
    
  }
  return(res)
}