palabrasprimas.sh.c

Código

Dos mil diecisiete es un número primo. Podría también escribirse como 2017. El número primo anterior al dos mil diecisiete fue el dos mil once. El siguiente será el dos mil veintisiete. Me hace ilusión encontrarme en un año indivisible, hasta que recuerdo la arbitrariedad de los calendarios.

Si denominamos palabras primas a aquellas que ocupan en un determinado texto los lugares señalados por un número primo, podemos ver las primeras trescientas seis palabras primas contenidas en el Diccionario de la Real Academia Española en su vigésimo tercera edición, separadas con una barra para mayor claridad y sin tener en cuenta las diferentes entradas que hacen uso de la misma grafía.


#!/bin/bash
# palabrasprimas.sh
# Busca las palabras que ocupan una posición de número primo en el diccionario que se indique.
# Hace uso del programa para buscar números primos menor que uno dado
# primos.c

diccionario="diccionario.txt"
nummaximo=`wc -l $diccionario|awk '{print $1}'`
contador=0

echo -e "Palabras primas del diccionario de la Real Academia Española\n"

# Llamamos al programa primos
numprimos=`./primos $nummaximo`
for l in $numprimos
do
  contador=`echo "$contador+1"|bc`
  palabra=`awk "NR==$l" $diccionario`
  # echo "$palabra es la palabra correspondiente al primo número $contador que ocupa la posición $l"
  echo -n "$palabra/ "
done

echo -e "\nSe han encontrado un número de $contador palabras ocupando posiciones de números primos en un total de $nummaximo palabras posibles"

palabrasprimas.c

Ejecución

La salida de este programa son las palabras primas del diccionario de la RAE o, en esta muestra, las 306 palabras primas existentes en las 2017 primeras palabras del mismo.

Palabras primas del diccionario de la Real Academia Española

a-/ aba/ ababillarse/ abacá/ abacero, ra/ ábaco/ abadejo/ abadernar/ abadiado/ abajeño, ña/ abajo/ abaldonar/ aballar/ abalorio/ abanar/ abanderar/ abandono/ abanicazo/ abano/ abaratamiento/ abarbetar/ abarcón/ abarquero, ra / abarraganarse/ abarrisco/ abarrotería/ abarse/ abastanza/ abastecedor, ra/ abasto/ abderitano, na/ abdolución/ abecé/ abedul/ abejoneo/ abejorro/ abemolar/ aberrante/ abertzale/ abia/ abiete/ abietino, na/ abiótico, ca/ ab irato/ abisinio, nia/ abismal/ ablandahígos/ ablucionar/ abnegar/ abobamiento/ abocado, da/ abocardar/ abocetado, da/ abofarse/ abogado, da/ abolengo, ga/ abolladura/ abollón/ abombado, da/ abominable/ abominación/ abondo/ ab origine/ aborrecedor, ra/ aborrecible/ aborrible/ abotinado, da/ aboyar/ abrasamiento/ abrasilado, da/ abravecer/ abrazar/ abrelatas/ abretonar/ abreviadamente/ abreviatura/ abridor, ra/ abrigo/ abrileño, ña/ abrochadura/ abroma/ abromar/ abrutado, da/ abruzo/ absconder/ absentarse/ absidiolo/ absolutorio, ria/ absolver/ absorbedero, ra/ absortar/ abstinencia/ absuelto, ta/ abuchear/ abuhardillado, da/ abulagar/ abulón/ abuñolar/ abuñuelar/ abusión/ abuzarse/ acaballado, da/ acabangado, da/ acabestrillar/ acabo/ acachetear/ academismo/ acaecimiento/ acalabrotar/ acalambrar/ acallamiento/ acalorado, da/ acaloro/ acalumniador, ra/ acampo/ acanelado, da/ acanilado, da/ acantarar/ acantio/ acantonamiento/ acantopterigio, gia/ acápite/ acapulqueño, ña/ acareamiento/ ácaro/ acarreamiento/ acaso/ acatar/ acaudalador, ra/ acautelarse/ accésit/ accesorio, ria/ accidentario, ria/ accionar/ accionista/ acebolladura/ acebucheno, na/ acecinar/ acedo, da/ aceitero, ra/ aceitoso, sa/ acelerada/ acelerado, da/ acelerar/ acelerómetro/ acemite/ aceñero, ra/ acepilladura/ aceptabilidad/ aceptador, ra/ acerbo, ba/ acercar/ acerería/ aceríneo, a/ acescente/ acético, ca/ acetosa/ achabacanamiento/ achachila/ achajuanado, da/ achantado, da/ achaquero/ achelense/ achicadura/ achicharramiento/ achichinque/ achinería/ achiotero, ra/ achocar/ achogcha/ -achón/ achorcholarse/ achuela/ -achuelo, la/ achumpipado, da/ aciano/ acíbar/ acicatear/ acicular/ acidia/ aciguatar/ acimentarse/ acimut/ acinturar/ acirate/ aclamar/ aclaratorio, ria/ aclimatación/ aclorhídrico, ca/ acocil/ acocotar/ acodiciar/ acogimiento/ acojonante/ acolchar / acolitar/ acolmillado/ acomodación/ acomodador, ra/ acompañador, ra/ acompasamiento/ acomplejado, da/ aconcagüino, na/ aconfesional/ aconsejable/ acopio/ acoplador, ra/ acople/ acorazada/ acorazamiento/ acordación/ acordante/ acordar/ acordeón/ acorredor, ra/ acorro/ acorvar/ acrecentador/ acreditación/ acreer/ acribillar/ acritud/ acromático, ca/ acróstico, ca/ acroy/ actancial/ actínico, ca/ actinomices/ activamente/ activista/ acto/ actualidad/ acuacultura/ acuartar/ acuartelamiento/ acuátil/ acuatizar/ acuchilladizo/ acuciador, ra/ ácueo, a/ acuitar/ acullico/ acumular/ acuñador, ra/ acupuntor, ra/ acurrullar/ acuse/ acusique/ ad-/ adagio/ adamita/ adanismo/ adaptativo, va/ adárame/ adárgama/ ad cautelam/ adecenar/ adefera/ adelantador, ra/ ademán/ adenda/ adeno-/ adenohipófisis/ adherecer/ adhesión/ ad hoc/ adiamiento/ adiestrar/ adimensional/ adiposis/ adivas/ adivinamiento/ adjesividad/ adjetivo, va/ ad libitum/ administrado, da/ administrativista/ administratorio, ria/ admonición/ adobado/ adocenar/ adolescencia/ adopción/ adoquinamiento/ adorante/ adormecer/ adormecimiento/ adormilarse/ adornador, ra/ adovelado, da/ adquisidor, ra/ adral/ adrenalina/ adstricción/ adstringir/ aduja/ adul/ adulzorar/ adundado, da/ adustión/ advenedizo, za/ adventicio, cia/ adventista/ adverbial/ adversidad/ advertimiento/ 

Se han encontrado un número de 306 palabras ocupando posiciones de números primos en un total de 2017 palabras posibles.

s.e.u o.

primos.c

Los apasionantes números primos

Sencillo programa para calcular una lista de los números primos menores que un valor dado. El mayor posible de los valores proporcionados es 2147483647, pero muchos ordenadores no serían capaces de llegar a ese cálculo.

Lo usé en combinación con palabrasprimas.sh para generar una lista de palabras primas.


/*****************************************
Primos.c
Lista los números primos hasta un máximo
*****************************************/
#include <stdio.h>
#include <math.h>
#include <errno.h>   // errno
#include <limits.h>  // INT_MAX
#include <stdlib.h>  // strtol

int primo(int p);


int main(int argc, char *argv[])
{
  if (argc<2) {printf("%s NUMEROMAYOR [-v]\n", argv[0]); return 0; };
  char *p;
  int nummax;
  int numero, numprimos=0;

  // Convertimos argv[1] en un entero largo
  errno = 0;
  long conv = strtol(argv[1], &p, 10);

  // Busca errores en la conversión
  if (errno != 0 || *p != '\0' || conv > INT_MAX || conv < 0) {
    printf("\nO bien el valor entrado no era un número natural o excedía el valor posible.\n");
    return 0;
  } else {
    // No error
    nummax = conv;    
    if (argv[2]) printf("Vamos a calcular los números primos menores o iguales que %d\n", nummax);
  } 

  for (numero = 0; numero <= nummax; numero++)
  {
    if (primo(numero)) {
      printf("%d ", numero);
      numprimos++;
    };
  };
  
  if (argv[2]) {
    if (numprimos) printf("\nSe han encontrado %d números primos menores o iguales que %d\n", numprimos, nummax);
    else printf("\nNo se han encontrado números primos menores o iguales que %d\n", nummax);
  };

  return numprimos; // Devolvemos el número de primos encontrados
}
/*****************************************
int primo(int p)
Determina si un número dado es primo
*****************************************/
int primo(int p){
  int i;

  if(p<2) return 0; 
  for(i=2;i<=sqrt(p);i++) if(p%i == 0) return 0; 
  return 1;
}