Está en la página 1de 15

Universidad de Manizales

Facultad de Ciencias e Ingeniera

$OJRULWPRHFLHQWHHQOD
generacin de una tabla de
primalidad de nmeros usando
Programacin Funcional*1
>$QDSSOLFDWLRQRIDVLPSOHDQGHIFLHQW
algorithm to generate a prime number table
XVLQJ)XQFWLRQDO3URJUDPPLQJ@
OMAR IVN TREJOS BURITIC2
RECIBO: 23.01.2014 APROBACIN: 19.06.2014

Resumen
En el presente artculo se acude a la Programacin Funcional
para generar una tabla de anlisis de primalidad de nmeros en
un rango dado a partir del uso de un algoritmo que, por las neceVLGDGHVGHOPLVPRREMHWLYRWLHQHFDUDFWHUtVWLFDVGHVHUHFLHQWH
Se plantea la fundamentacin de dicho algoritmo y adems se
aprovecha su estructura lgica para resolver el problema propuesto. El propsito de este artculo es mostrar una arista til de la
HFLHQFLDDOJRUtWPLFDWHQLHQGRHQFXHQWDODVFDUDFWHUtVWLFDVWHFQRlgicas modernas y los problemas que la matemtica provee. Se
hace uso del lenguaje de programacin Scheme y se aprovechan
sus potencialidades para manejo, tamao y clculo de datos. Se
GHPXHVWUDTXHDFXGLHQGRDDOJRULWPRVHFLHQWHV\DXQDOyJLFD
muy simple, la tecnologa computacional moderna puede ser de
una inmensa utilidad para resolver problemas matemticos.

*


Modelo para la citacin de este artculo:


75(-26%85,7,&2PDU,YiQ  (VWDGR$OJRULWPRHFLHQWHHQODJHQHUDFLyQGHXQD
tabla de primalidad de nmeros usando Programacin Funcional. En: Ventana Informtica
No. 31 (jul-dic). Manizales (Colombia): Facultad de Ciencias e Ingeniera, Universidad de
Manizales. p. 131-145. ISSN: 0123-9678
$UWtFXORGHLQYHVWLJDFLyQFLHQWtFD\WHFQROyJLFDSURYHQLHQWHGHOSUR\HFWRDesarrollo de contenidos y metodologa para
un curso de Introduccin a la Programacin basado en el paradigma de Programacin Funcional para estudiantes
de primeros semestres de Ingenieras utilizando actividades y tcnicas de Active Learning tramitado y aprobado ante
la Vicerrectora de Investigaciones, Innovacin y Extensin de la Universidad Tecnolgica de Pereira..
PhD en Ciencias de la Educacin. Docente de Planta Programa Ingeniera de Sistemas y
Computacin, Universidad Tecnolgica de Pereira (Pereira, Colombia). Correo electrnico:
omartrejos@utp.edu.co

131

N 31 - julio - diciembre / 2014

Palabras Clave: $OJRULWPR HFLHQFLD PDWHPiWLFDV Q~PHURV


primos, programacin funcional

Abstract
In this article, we use Functional Programming to generate an
DQDO\WLFWDEOHRISULPHQXPEHUVLQDVSHFLFUDQJHXVLQJDQHIFLHQWDOJRULWKP<RXFDQQGWKHIRXQGDWLRQDQGZHXVHLWVORJLFDO
structure to solve the problem. The proposal of this article is to
VKRZWKHXVHIXOIDFHRIWKHDSSOLHGHIFLHQWDOJRULWKPLFNQRZLQJ
the modern technologies y the math problems. We use Scheme as
a programming language and we use its potentialities to manage,
WRVWRUDJHDQGFDOFXODWHGDWD:HGHPRQVWUDWHWKDWXVLQJHIFLHQW
algorithms and a simple logic, the computational technologies are
very useful solving math problems.
Keywords: $OJRULWKPHIFLHQF\PDWKVSULPHQXPEHUV)XQFWLRnal programming

Introduccin
La computacin se ha convertido en el espacio excelso para encontrar
soluciones a problemas que tradicionalmente han tenido que resolverse
SRURWURVPpWRGRV3ULQFLSLRVFRPRODFRPSOHMLGDG\ODHFLHQFLDVRQ
fundamentos tericos sobre los cuales se construyen las soluciones
computacionales modernas y, con ello, estos principios han permitido
que la programacin de computadores evolucione en su concepcin
y aplicacin.
Debe tenerse claro que la complejidad lgica se entiende como la necesidad de encontrar en los recursos ms excelsos de las matemticas,
los caminos que permiten el logro de unos objetivos, independiente de
ORVFRQFHSWRVTXHVXE\DFHQDODVROXFLyQ/DHFLHQFLDSRUVXSDUWH
se entiende como el apropiado uso de los recursos que provee la tecnologa y, especialmente, la computacin de forma que las soluciones
sean de bajo costo, en el sentido ms amplio.
(OSUREOHPDTXHVHSODQWHDFRQVLVWHHQHVWDEOHFHUHQXQUDQJRGHQLGR
cules nmeros cumplen con la caracterstica de primalidad3 y cules
no, sealndolos y contabilizndolos. Aprovechando los conceptos
3

132

Se conoce como primalidad la propiedad que tiene un nmero de ser, precisamente, un


nmero primo. Debido a que el nico nmero primo par es el nmero 2 (dado que cumple con
ODGHQLFLyQ HQWRQFHVFRQIUHFXHQFLDVHXWLOL]DHOWpUPLQRQ~PHURSULPRLPSDUSDUDUHIHULUVH
a cualquier nmero primo mayor que 2 (Burns citado por Trejos, 2011, 277).

Universidad de Manizales

Facultad de Ciencias e Ingeniera

GH HFLHQFLD \ VLPSOLFLGDG VH SURFHGH HQ HVWH DUWtFXOR D SODQWHDU


una solucin al problema formulado capitalizando las bondades de la
SURJUDPDFLyQIXQFLRQDO\ODVIDFLOLGDGHVGHFRGLFDFLyQ\HQWURQTXH
matemtico del lenguaje de programacin Scheme. En el desarrollo
del algoritmo se explicar porqu este puede considerarse de alta
HFLHQFLD\VLPSOLFLGDG
(QODDFWXDOLGDGWHQGHQFLDVFRPRHODQiOLVLVGHFRPSOHMLGDGODHFLHQcia e, incluso, la simplicidad de un algoritmo, corresponden a tpicos
que no han de descuidarse dada la gran incidencia que tiene la teora
de computabilidad y sus aplicaciones en el mundo moderno. Se ha
acudido a una literatura que fundamenta la historia de las matemticas, la historia de la computacin, la teora de los nmeros, la teora
GHODFRPSOHMLGDG HVSHFtFDPHQWHODWHRUtDGHODcomputabilidad) y la
programacin funcional como base conceptual.
Desde lo acadmico, puede considerarse el presente artculo como un
DSRUWHSDUDH[SOLFDUWDQWRHOFRQFHSWRGHHFLHQFLDHQORVWpUPLQRVTXH
ms adelante se aclaran, como para encontrar un punto de encuentro
entre la matemtica, desde la ptica de sus problemas tradicionales,
y la computacin, con tecnologas prcticas y conceptuales aplicadas.
Para los estudiantes de Ingeniera de Sistemas ser de gran utilidad
tener un ejemplo claro de aplicacin de la programacin, al alcance
de sus conocimientos, partiendo de los dos principios rectores de la
programacin moderna. Se ha acudido al lenguaje de programacin
Scheme Entorno Dr Racket debido a la sencillez con que se pueden
implementar soluciones a problemas matemticos, la facilidad de monitorear pruebas a las funciones, la prioridad que este lenguaje (y su
paradigma asociado) le conceden a las funciones y la simplicidad para
comprender las soluciones.
El objetivo general consiste en demostrar que se pueden solucionar
problemas matemticos con programacin funcional y algoritmos de
DOWDHFLHQFLDDVtFRPRFRPSOHMLGDGPRGHUDGD\FRQUPDUHOVHQWLGR
que tienen las tecnologas modernas en el desarrollo de soluciones a
los problemas de la sociedad.
En trminos generales, el programa aprovecha un algoritmo ptimo para
deteccin de nmeros primos y, en la medida en que va recorriendo un
rango dado, va ubicando un sealador que indica la primalidad o no
GHORVQ~PHURVFRPSUHQGLGRVHQGLFKRUDQJR$OQDOVHWRWDOL]DQORV
resultados indicando cuntos nmeros primos hay en el rango y cuntos
no son primos, presentando una tabla resumen.
Como hiptesis se plantea que, an en un momento infante de la formacin de ingenieros de sistemas, es posible implementar soluciones
133

N 31 - julio - diciembre / 2014

FODUDPHQWHHFLHQWHV\VLPSOHVTXHUHVXHOYDQSUREOHPDVGHODPDWHPitica, al alcance de los estudiantes en sus primeras fases de formacin.


Este artculo comienza presentando una teora en relacin con los temas
que se involucran, posteriormente describe de manera detallada el programa y las funciones que se disearon para resolverlo. Se presentan
los resultados obtenidos y, con base en ellos, se hace una discusin
analtica para terminar con conclusiones producto de las mismas.

1. Fundamento terico
La primalidad de un nmero, tema del cual se ocupa la Teora de Nmeros en las Matemticas, es la caracterstica que tiene un nmero
natural de tener solamente dos divisores exactos que son el nmero 1
y el mismo nmero, segn Giordano (2009, 37). Una tabla de primalidad de nmeros primos consiste en la relacin de todos los nmeros
naturales comprendidos en un rango de manera que en cada uno se
LGHQWLTXHVLFXPSOHRQRFRQGLFKDFDUDFWHUtVWLFD
Darse a la tarea de encontrar todos los divisores exactos de un nmero
UHSUHVHQWDUHFRUUHUHOFDPLQRSDUDFRQUPDUTXHGLFKRQ~PHURSRVHHR
no la caracterstica de ser primo, dado que si la cantidad de divisores es
PD\RUTXHGRVVLJQLFDTXHHOQ~PHURQRHVSULPR\VLGLFKDFDQWLGDG
es dos indica que es un nmero primo, de lo cual se puede suponer
que los dos divisores son el 1 y el mismo nmero.
/DGHQLFLyQGHODprimalidad4 de un nmero, de acuerdo con Delvin
(2002, 26), ha sido preocupacin de los matemticos de todas las
pocas y para resolverlo se ha acudido a diferentes formas basada
en tcnicas y estrategias que provee la matemtica. Desde hace ms
de 20.000 aos, con los huesos de Ishango, el ser humano concibi
un conjunto de nmeros con una caracterstica diferente a los dems.
/RVHJLSFLRVORVEDELORQLRV\ORVJULHJRVSXHEORVHQGRQGHRUHFLyOD
PDWHPiWLFDWDPELpQVHRFXSDURQGHSHUODUODprimalidad como una
caracterstica especial de los nmeros y abrieron el camino para lo que
hoy se conoce como Teora de Nmeros.
Las fracciones egipcias, sealan Rey & Pastor (2008, 52), que se idenWLFDEDQSRUTXHHOQXPHUDGRUVLHPSUHHUDHOQ~PHUR\ORVGHQRPLnadores nmeros primos, se usaban para expresar cualquier cantidad
en forma de fraccionario, bajo un mtodo similar al de descomposicin
por factores primos que se utiliza en la actualidad, lo cual indica que
 'HEHDQRWDUVHTXHSRUGHQLFLyQHOQ~PHURQRHVXQQ~PHURSULPR\TXHHOLQQLWRFRQMXQWR
de los nmeros primos se denota con P.

134

Universidad de Manizales

Facultad de Ciencias e Ingeniera

los egipcios tenan una nocin bastante slida de la primalidad como


caracterstica de algunos nmeros naturales.
(XFOLGHVHQ$&LGHyXQDIRUPDFRQDEOHGHSUREDUODH[LVWHQcia de los nmeros primos y fue capaz de demostrar que el conjunto
GHHOORVHVLQQLWRFRPRORFRQVLJQyHQVXOLEUR(OHPHQWRV7RPR9,,
Estas bases, asegura Krantz (2010, 86), fueron retomadas por varios
matemticos como el monje Mersenne.
Eratstenes dise su criba, como otra forma algortmica de resolver
el problema a partir de la interaccin del concepto de nmeros primos,
con la idea de una matriz de nmeros5. Si bien este mtodo es bastante
dispendioso, no se puede descartar pues, con las tecnologas modernas,
SXHGHVHUDSURYHFKDGRFRPRDOJRULWPRLQHFLHQWHSHURHIHFWLYRHQOD
solucin del hallazgo de los nmeros primos.
Fermat, Euler, Mersenne y Riemann, entre otros matemticos, han intentado caracterizar los nmeros primos haciendo a un lado las sumas
y restas para acudir a la formulacin matemtica de alto nivel con el
iQLPRGHKDFHUPiVHFLHQWHGLFKDFDUDFWHUL]DFLyQGHIRUPDTXHHO
WUDEDMRGHSDSHO\OiSL]GHRWURVWLHPSRVVHDPiVOODQRPiVFRQDEOH
y, por ende, menos agotador.
En este punto es, segn Grant, Palmer & Smith (2011, 22), donde la
tecnologa computacional moderna permite encontrar nmeros primos
con muchos dgitos, como los que usa la empresa estadounidense RSA
SDUDHOGHVDUUROORGHVXVFODYHVS~EOLFDVHQWUDQVPLVLyQFRQDEOHGH
informacin por los canales de Internet. La gran ventaja que proporcionan las tecnologas modernas, y sus dispositivos asociados, es poner
a disposicin estructuras electrnicas de alta velocidad, procesamiento
HFLHQWH\JUDQDSURYHFKDPLHQWRGHUHFXUVRV
Cormen & Leiserson (2009, 55), consideran que la computacin ha reQDGRSDUDHIHFWRVGHOGLVHxRGHDOJRULWPRVHFLHQWHVGRVFRQFHSWRV
- la complejidad computacional, se ocupa del anlisis de los recursos
computacionales involucrados en la implementacin de una solucin
a un problema computable, y - la complejidad algortmica, aborda el
anlisis detallado de los algoritmos, de los recursos que requiere y de
la manera de optimizarlos, seala Mackay (2006, 163), para que su
FRGLFDFLyQVHKDJDFRQHFLHQFLD
El mismo concepto de algoritmo, a pesar de que aparece hacia el ao
FRQ$O-XDULVPLVHSRWHQFLDOL]DPHMRUDRSWLPL]D\UHQDFRQOD
intervencin de la tecnologa computacional y su utilizacin en la implementacin de soluciones. Algunos matemticos como Napier, Kepler,
 8QFRQMXQWRGHQ~PHURVRUJDQL]DGRVHQIRUPDGHODV\FROXPQDV

135

N 31 - julio - diciembre / 2014

Pascal y Babbage, se ocuparon de disear y construir dispositivos que


pudieran resolver problemas matemticos de una manera ms gil y
FRQDEOH
Los sistemas electrnicos mejoraron su rendimiento y, hacia la mitad
del siglo XX, el mundo cambi con la aparicin de las altas velocidades y los dispositivos de alto rendimiento, donde el computador como
SURWDJRQLVWDSRWHQFLDODREWHQFLyQGHVROXFLRQHVGRQGHHFLHQFLD\
FRPSOHMLGDGFRQX\HQ3DUD%UDVVDUG  HQODDFWXDOLGDGHO
desarrollo de la tecnologa ha llevado a dispositivos de alta integracin,
gran almacenamiento y alto procesamiento, las tres caractersticas que
LGHQWLFDQHOPXQGRGHORVDYDQFHVPRGHUQRV
Las necesidades de la sociedad se suplen desde las nuevas tecnologas
con sus dos principales caractersticas: veracidad y oportunidad, que
segn expresan Gerequeta & Vallecito (2007, 111), sin que tenga que
ser una regla, se puede asociar mucho ms la veracidad con el software
y la oportunidad con el hardware, como base clave para soluciones a
problemas computacionales.
De acuerdo con Sedgewick & Wayne (2011, 37), a partir de la maduracin de las tecnologas computacionales, aparece la complejidad,
caracterstica de lo complejo, que en s mismo encierra lo complicado,
\ TXH SXHGH GHQLUVH FRPR DTXHOOR TXH UHTXLHUH XQ HVWXGLR GHWHQLdo y profundo para ser entendido en su funcionamiento como en su
composicin.
La Teora de la Complejidad se ocupa de analizar el todo y sus partes y
cuando este todo tiene que ver con solucin a problemas computacionales se habla de Teora de la Complejidad Computacional, considerada
por Trejos (2010a, 155), como un rea de la Teora de la Computacin
TXHVHRFXSDGHDQDOL]DUFRPSUHQGHU\FODVLFDUORVSUREOHPDVFRPSXWDFLRQDOHVHQVXGLFXOWDGSURSLD QLYHOGHGLFXOWDGUHODFLRQDGRFRQ
su naturaleza innata) y las diferentes relaciones que se presentan. La
complejidad algortmica corresponde al anlisis de la cantidad de recursos que se requieren temporalmente para hacer efectiva la solucin
de un problema computable.
(OFRQFHSWRGHHFLHQFLDLQFRUSRUDGRHQHOWtWXORGHHVWHDUWtFXORVHgn Trejos (2010b, 155), hace referencia a la capacidad de disponer
de los recursos computacionales necesarios para alcanzar un objetivo
determinado de manera que los resultados sean ptimos con menor
consumo de dichos recursos. Lo deseable, seala Trejos (1999, 39),
HVTXHWRGRDOJRULWPRVHDDOWDPHQWHHFLHQWHHQWpUPLQRVFRPSXWDcionales, la cual involucra la complejidad computacional como una de
VXVEDVHV(QWUHODHFLHQFLD\ODFRPSOHMLGDGVHKDGHVDUUROODGRXQD
136

Universidad de Manizales

Facultad de Ciencias e Ingeniera

solucin que permite generar una tabla de anlisis de primalidad de


nmeros en un rango dado apoyados en la programacin funcional, que
se convierte en una vertiente de la programacin declarativa y, en ella,
HOQ~FOHRGHODSURJUDPDFLyQHVODIXQFLyQLQFOX\HQGRVXGHQLFLyQ
desde lo matemtico y las relaciones que se establecen.
Se escogi la programacin funcional y el lenguaje de programacin
Scheme debido a su alta cercana con la notacin matemtica y a lo
proclive que es este lenguaje para facilitar la solucin de problemas de
orden matemtico. Se ha acudido al gran potencial que provee la programacin funcional desde el concepto de funcin y bajo la estrategia
de la recursividad que permite plantear soluciones de gran rendimiento
computable. En este programa se utiliz recursividad nivel III, es decir,
funciones recursivas que se apoyan en otras del mismo tipo para lograr
su objetivo, en trminos de Trejos (2011b, 276).

2. Metodologa
2.1 Descripcin
(OSURJUDPDGLVHxDGRFRQVLVWHHQODDSOLFDFLyQGHXQDOJRULWPRHFLHQWH
para la generacin de una tabla de primalidad de nmeros en un rango
dado usando programacin funcional:
;; ======================================================
;; DESPLIEGUE DE UNA TABLA DE PRIMALIDAD DE NMEROS
NATURALES
;; EN UN RANGO ;; DADO A PARTIR DE UN ALGORITMO DE EVALUACIN
;; OPTIMIZADO
;; Recibe un rango y evala cuales nmeros naturales dentro de ese
;; rango son primos y cules no, de forma que construye
una tabla
;; que despliega con la informacin pertinente totalizando
los resultados
;; ======================================================
;; Funcin que determina si un num es mltiplo de otro
GHQH GLYLVRUDE  'HQLFLyQGHODIXQFLyQ
LI  UHPDLQGHUDE  
6LHORQXPGLYLGHH[DFtamente al 1o
HQWRQFHVUHWRUQHXQYDORU WUXH
6LQRUHWRUQHXQYDORU )DOVH
)LQ&RQGLFLRQDO)LQ)XQFLyQ

137

N 31 - julio - diciembre / 2014

)XQFLyQTXHFXHQWDORVGLYH[DFWRVGHXQQXP
HQHOUDQJR UDL]FXDGQXP
GHQH FXHQWDGLYLVRUHVQXPGLY 
 'HQLFLyQ GH OD
funcin
 LI GLY RRU  VTUWQXP  
6LVHOOHJyDOD
raz cuad
;; entonces reciba lo que devuelva la funcin divisor
envindole
;; como argumento el num y la raiz cuadrada del num
GLYLVRUQXP RRU  VTUWQXP  
;; Sino, entonces sume lo que retorne la funcin divisor
mas
;; lo que retorne la misma funcin cuentadivisores
;; incrementando en 1 el valor de divisor
 GLYLVRUQXPGLY
 FXHQWDGLYLVRUHVQXP GLY





 )LQ &RQGLFLRQDO
- Fin Funcin
)XQFLyQTXHGHWHUPLQDVLXQQXPHVSULPR RSWLPL]DGD
GHQH HVSULPRQ 'HQLFLyQGHODIXQFLyQ
LI  FXHQWDGLYLVRUHV Q      6L HO QXP WLHQH 
divisores
UHWRUQH 9HUGDGHUR
UHWRUQH )DOVR
)LQ&RQGLFLRQDO)LQ)XQFLyQ
;; Funcin que recibe el rango de evaluacin
GHQH UDQJRQXPLQLWRSH 
'HQLFLyQGHIXQFLyQ
 LI !LQLWRSH 

6LVHOOHJyDOWRSH
 EHJLQ
0RVWUDUOtQHDGREOHTXHLQGLTXHQDO
QHZOLQH
 GLVSOD\

(begin
;; sino
 QHZOLQH
 GLVSOD\
 GLVSOD\LQL 

PRVWUDUHOYDORUHYDOXDGR
'HSHQGLHQGRGHVLHVSULPRRQRXELFDUXQD[HQ
;; la columna correspondiente
 LI  HVSULPRLQL 
(begin
 GLVSOD\;
 UDQJRQXP LQL WRSH

138

Universidad de Manizales

(begin
 GLVSOD\;
 UDQJRQXP LQL WRSH
   



Facultad de Ciencias e Ingeniera

)LQ)XQFLyQ

;; Funcin que cuenta la cantidad de nmeros primos


GHILQH FXHQWDSULPRVLQLWRSH 
 'HILQLFLyQ GH
funcin
 LI LQLWRSH 
VLVHKDOOHJDGRDOWRSH
 HVSULPRLQL HQWRQFHVHYDOXDUHOWRSH
;; sino sumar lo que retorne la funcin esprimo
;; mas lo que retorne la misma funcin cuentaprimos
;; incrementando el valor inicial
  HVSULPRLQL 
 FXHQWDSULPRV LQL WRSH
 


)LQ&RQGLFLRQDO)LQ)XQFLyQ
;; Funcin que cuenta la cantidad de nmeros no primos
GHILQH FXHQWDQRSULPRVLQLWRSH 
 'HILQLFLyQ GH
funcin
   WRSHLQL  FDOFXODUODFDQWLGDGH
 FXHQWDSULPRVLQLWRSH 
QXPVQRSULPRVTXHKD\
 
HQHOUDQJR
 )LQ&RQGLFLRQDO)LQ)XQFLyQ
;; Funcin que inicia el proceso
GHQH LQWHUID]LQLWRSH 
'HQLFLyQGHIXQFLyQ
 QHZOLQH 
/tQHDHQEODQFR
 GLVSOD\1~PHUR3ULPR1R3ULPR 3RQHUWtWXORV
 UDQJRQXPLQLWRSH  'HVSOHJDUWDEODGHSULPDOLGDG
 QHZOLQH 
/tQHDHQEODQFR
 GLVSOD\7RWDOHV 7LWXORGH7RWDOHV
 GLVSOD\ FXHQWDSULPRVLQLWRSH   0RVWUDU FDQW GH
primos
 GLVSOD\ 'HMDUHVSDFLRVHQEODQFR
 GLVSOD\ FXHQWDQRSULPRV LQL WRSH   0RVWUDU FDQW GH
no primos
 
)LQ)XQFLyQ

139

N 31 - julio - diciembre / 2014

2.2 Aplicacin
El esquema funcional de la solucin algortmica representa la estructura lgica que permite observar las interacciones entre las funciones y
HOXMRPLVPRGHOSURJUDPD )LJXUD GRQGHODIXQFLyQLQWHUID]OODPD
a tres funciones: rangonuma, cuentaprimos y cuentanoprimos a las
cuales les enva los argumentos ini y tope. rangonum es una funcin
recursiva y llama a la funcin esprimo (a la cual le enva el valor de
ini), que a su vez llama a la funcin cuentadivisores (que recibe dos
argumentos num y div) y esta, a la funcin divisor (que recibe dos
argumentos a y b) que retorna un valor 1 o 0 dependiendo de una
condicin.
La funcin cuentaprimos llama a la funcin esprimo que realiza la misma secuencia anterior. Esta funcin llama a la funcin cuentadivisores
(a la cual le enva los argumentos num y div) y que a su vez llama a la
funcin divisor (que recibe los argumentos a y b), la cual devuelve un
valor 1 o 0 dependiendo de una condicin. La funcin cuentanoprimos
llama a la funcin cuentaprimos y esta le retorna un resultado producto
de una resta.

Figura 1. Esquema Funcional

140

Universidad de Manizales

Facultad de Ciencias e Ingeniera

3. Resultados
3.1 Descripcin de resultados
En su parte aplicativa, al momento de ejecutar al programa se obtienen
los siguientes resultados:
! LQWHUID]
Nmero Primo NoPrimo
;
;
;
;
;
;
;
;
;
;
;
==============================
7RWDOHV

En este primer caso se evalan los nmeros primos comprendidos entre


1000 y 1010. El programa genera la tabla correspondiente encontrando
1 nmero primo (1009) y 10 nmeros no primos dentro del rango de los
11 nmeros evaluados.
! LQWHUID]
Nmero Primo NoPrimo
;
;
;
;
;
;
;
;
;
;
;
==============================
7RWDOHV

En este segundo ejemplo, se establece como rango de evaluacin los


nmeros 40 a 60, para el cual se genera la tabla con cinco primos y 16
141

N 31 - julio - diciembre / 2014

no primos para completar los 21 nmeros naturales del rango evaluado.


Es de anotar que el rango de evaluacin puede ser tan amplio como
se desee. Para efectos del espacio disponible en este artculo se han
seleccionado solamente tres ejemplos con rangos breves. Un llamado
totalmente posible de este programa podra ser:
! LQWHUID]

Y los totales que originara, luego de la tabla de primalidad, son los


siguientes:
==============================
7RWDOHV

Lo cual indica que en el rango (500000, 500100) existen seis nmeros


primos y 95 no primos6.

3.2 Discusin
Lo primero que puede destacarse de esta solucin es el cdigo muy
sencillo y fcil de entender, lo cual posibilita que un cdigo, con estas
caractersticas, pueda intervenirse, ajustarse, optimizarse y darle manWHQLPLHQWRGHXQDPDQHUDVLPSOH\iJLO/DFRGLFDFLyQVLPSOHVHQRWD
en funciones como la siguiente:
;; Funcin que determina si un num es mltiplo de otro
GHQH GLYLVRUDE 'HQLFLyQGHODIXQFLyQ
LI   UHPDLQGHUDE  6LHORQXPGLYLGHH[DFWDmente al 1o

HQWRQFHVUHWRUQHXQYDORU WUXH



6LQRUHWRUQHXQYDORU IDOVH

)LQ&RQGLFLRQDO)LQ)XQFLyQ

En este tipo de funciones, es muy sencillo comprender su lgica y


establecer que si el residuo de dividir el valor del argumento a entre el
valor del argumento b es Verdadero, entonces se retornar 1 y si es
Falso, se retornar el valor 0. La simplicidad de esta funcin hace que
su utilizacin y aplicacin sea muy sencilla a partir de la lgica expuesta.
Se aprovecha en buena medida la potencialidad de la recursividad
pues, a la luz tanto del esquema funcional como del cdigo, el programa
solucin se apoya en tres funciones recursivas (rangonum, cuentapri6

142

Por razones de espacio se ha suprimido la relacin puntual de los nmeros comprendidos en


el rango con su respectivo anlisis y ubicacin de primalidad.

Universidad de Manizales

Facultad de Ciencias e Ingeniera

mos y cuentadivisores) que, si bien implican un consumo de recursos


computacionales, son solucin sencilla y simple de comprender, dentro
del contexto del programa presentado y de las posibilidades de las tecnologas modernas. Tal como se explic, en este programa se acude
a la recursividad nivel III, es decir, funciones recursivas que se apoyan
en otras funciones recursivas.
La relacin entre las funciones y el desempeo de cada una es ptima
en un nivel alto (ms no absoluto), pues de una parte es claro que el
enlace de ida de las funciones se capitaliza a partir de los argumentos y el enlace de venida se aprovecha desde los valores de retorno.
Se ha de notar que, tal como se aprecia en el esquema funcional, los
argumentos enviados corresponden a los argumentos originales que
inician el programa o a algn componente aritmtico de ellos. De otra
parte los valores de retorno son el resultado de operaciones simples
(sumas o restas) o valores 1 o 0, todava ms simple.
Debe anotarse que para los nmeros 2 y 3, el programa requerir
ajustes muy especiales, puesto que ellos no estaran contemplados
dentro de la funcin cuentadivisores, ya que esta depende de que se
establezca un rango entero no vaco ni igual a cero entre 2 y la raz
cuadrada del nmero, asumiendo eso s, que este segundo valor es
superior o igual al nmero 2. Precisamente, para los valores citados
(2 o 3) no se cumple esta condicin y, por tanto, el rango quedara con
un valor inicial inferior al tope del mismo, lo cual hara inconsistente la
funcin. Un posible ajuste de la funcin cuentadivisores que, omitiendo
comentarios, aparece as:
GHQH FXHQWDGLYLVRUHVQXPGLY 

 LI GLY RRU  VTUWQXP  
 GLYLVRUQXP RRU  VTUWQXP  
  GLYLVRUQXPGLY  FXHQWDGLYLVRUHVQXP GLY



Podra ser el siguiente:


GHQH FXHQWDGLYLVRUHVQXPGLY 

 LI GLY RRU  VTUWQXP  
 GLYLVRUQXP RRU  VTUWQXP  
EHJLQ


,QLFLRGHODPRGLFDFLyQ
 LI RU QXP  QXP  6LHVHOQ~PHURR




(QWRQFHVUHWRUQDU
  GLYLVRUQXPGLY  6LQRUHDOL]DURSHUDFLyQ
 FXHQWDGLYLVRUHVQXP GLY 
 



)LQGHODPRGLFDFLyQ
 



)LQGHOD)XQFLyQ

143

N 31 - julio - diciembre / 2014

Puede notarse que en la lnea en la cual se retorna un valor 0, esto


FRQUPDTXHHOQ~PHURRHOQ~PHURVRQSULPRVGHDFXHUGRDOD
evaluacin en la funcin esprimo:
)XQFLyQTXHGHWHUPLQDVLXQQXPHVSULPR RSWLPL]DGD
GHQH HVSULPRQ 

'HQLFLyQGHODIXQFLyQ
LI  FXHQWDGLYLVRUHVQ  
6LHOQXPWLHQH
GLYLVRUHV

UHWRUQH 9HUGDGHUR

UHWRUQH )DOVR

)LQ&RQGLFLRQDO)LQ)XQFLyQ

La funcin cuentadivisores puede optimizarse an ms, puesto que,


tal como est, la evaluacin de cada nmero n se hace en el rango
(2, raz cuadrada de n). Haciendo una mirada detenida del algoritmo
puede pensarse que si el nmero fuera 1000000 (un milln) no tendra
que hacerse todo el recorrido de evaluacin desde 2 hasta 1000 (que
es su raz cuadrada) dado que, con el solo hecho de encontrar que el
Q~PHURHVXQGLYLVRUH[DFWRGHOQ~PHURHVVXFLHQWHSDUDGHWHFWDU
que el nmero 1000000 no es un nmero primo. Esto acelerara notoriamente la evaluacin de los nmeros sin desconocer que, como est
planteada, es una buena solucin.
)LQDOPHQWHYDOHODSHQDDFRWDUTXHHOFRQFHSWRGHHFLHQFLDUDGLFDHQWUHV
factores dentro de este programa: - el diseo de las funciones en el cual es
acude a la simplicidad, - la relacin entre funciones, paso de argumentos
y retornos enteros y simples de comprender y manipular, y - los rangos de
evaluacin y el bueno uso de la recursividad cuando se hace necesario.

4. Conclusiones
Se pueden desarrollar algoritmos que provean soluciones a diferentes
SUREOHPDVEDMRXQHQIRTXHGHDOWDHFLHQFLD\VXFLHQWHFRPSOHMLGDG
de forma que se capitalicen las caractersticas de diseo y rendimiento
del hardware y el software moderno.
Vale la pena analizar el concepto de optimizacin en el diseo de algoritmos al momento de disear un programa que resuelva un problema,
especialmente cuando este sea de orden matemtico.
Conviene analizar hasta donde, en el diseo de un algoritmo, la complejidad de la solucin es necesaria pues una solucin como la que aqu
se expone se distingue por su alta simplicidad y, si bien es cierto que
al respecto de este problema existen diversas soluciones de diferentes
niveles de complejidad, las soluciones simples son las ms fciles de
144

Universidad de Manizales

Facultad de Ciencias e Ingeniera

HQWHQGHU\DSR\DGRVHQHOKDUGZDUHPRGHUQRSRGUtDQVHUVXFLHQWHV
para resolver ptimamente muchos problemas.
Resulta ser de gran utilidad ahondar en la teora de la computabilidad
para determinar criterios claros y concretos que permitan establecer
ODV VROXFLRQHV HQ ODV FXDOHV VH MXVWLFD DFXGLU D OD FRPSOHMLGDG \ OD
HFLHQFLD\HQFXiOHVQR
Siempre van a existir dos caminos para resolver un problema compuWDFLRQDOXQRTXHSXHGHVHUHOFRPSOHMR\HFLHQWHRWURTXHSXHGHVHU
VLPSOHHLQHFLHQWH(VSRVLEOHTXHDOJXQDVVROXFLRQHVOOHJXHQDVHU
FRPSOHMDVHLQHFLHQWHV\RWUDVOOHJXHQDVHUVLPSOHV\HFLHQWHV\HV
ese precisamente el tema que atae a la teora de la computabilidad.

5HIHUHQFLDVELEOLRJUiFDV
BRASSARD, G. & BRADLEY, P. (2009). Fundamentos de Algoritmia. Montreal (Canad): Prentice
Hall. 579 p. ISBN: 848 966 000X
CORMEN, T.H.; LEISERSON, C.E.; RIVEST, R.L. & STEIN, C. (2009). Introduction to Algorithms.
3 ed. Massachusetts (USA): MIT Press. 1313 p. ISBN: 978-0262033848
DEVLIN, K. (2002). El lenguaje de las matemticas. Barcelona (Espaa): Ediciones Robinbook.
381 p. ISBN: 84-95601-71-0
GEREQUETA, R. & VALLECILLO, A. (2007). Tcnicas de Diseo de Algoritmos. Mlaga (Espaa): Servicio de Publicaciones de la Universidad de Mlaga. 315 p. ISBN: 9788474967845.
GIORDANO, P. (2009). La soledad de los nmeros primos. Barcelona (Espaa): Narrativa Salamandra. 288 p. ISBN: 9788498382051
GRANT, M.; PALMER, Z & SMITH, S. (2011). Principles of Programming Languages: Version 0.7
[on line]. San Francisco (CA, USA): Creative Commons Attribution-Share Alike 3.0. 181 p.
<http://www.cs.jhu.edu/~scott/pl/book/dist/book/book.pdf> [consult: 27/03/2014]
KRANTZ, S.G. (2010). An Episodic History of Mathematics. Mathematical culture through problem solving. Washington D.C. (USA): Mathematical Association of America. 381 p. ISBN:
978-0883857663
MACKAY, D.C. (2006). Information Theory, Inference and Learning Algorithms. 4 ed. Cambridge
(UK): Cambridge University Press. 640 p. ISBN: 978-0521642989
REY PASTOR, J. & BABINI, J. (2008). Historia de la Matemtica. Barcelona (Espaa): Gedisa
Editorial. 224 p. ISBN: 9788497847810
SEDGEWICK, R. & WAYNE, K. (2011). Algorithms. Upper Saddle River (NJ, USA): Pearson
Education, Inc. Princeton, USA. 937 p. ISBN: 978-0-321-57351-3
TREJOS B., O. I. (1999). La esencia de la lgica de programacin. Manizales (Colombia): Centro
Editorial Universidad de Caldas. 325 p. ISBN: 958-33-1125-1
TREJOS B., O. I. (2010a). Algoritmo de optimizacin para la deteccin de un nmero primo basado
en programacin funcional utilizando DrScheme. En: Revista Scientia et Technica, Vol. 17,
No. 47. Pereira (Colombia). p. 276-289. ISSN: 0122-1701
TREJOS B., O. I. (2010b). Determinacin simple de un nmero primo aplicando programacin
funcional a travs de DrScheme. En: Revista Scientia et Technica. Vol. 16, No. 45. Pereira
(Colombia). p. 155-160. ISSN: 0122-1701
TREJOS B., O. I. (2011a). Fundamentos de Programacin. Pereira (Colombia): Editorial Papiro.
152 p. ISBN: 978-958-8236-10-0
TREJOS B., O.I. (2011b). Algoritmo de optimizacin para la deteccin de un nmero primo basado
en programacin funcional utilizando DrScheme [en lnea]. En: Scientia et Technica, Vol. 17, No.
47 (abr). Pereira (Colombia): Universidad Tecnolgica de Pereira. p. 276-280. ISSN: 0122-1701.
<http://revistas.utp.edu.co/index.php/revistaciencia/article/view/1161/653> [consulta: 09/02/2014]

145

También podría gustarte