Documentos de Académico
Documentos de Profesional
Documentos de Cultura
$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.
*
131
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
Universidad de Manizales
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
135
Universidad de Manizales
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
GHQHGLYLVRUDE 'HQLFLyQGHODIXQFLyQ
LI UHPDLQGHUDE
6LHORQXPGLYLGHH[DFtamente al 1o
HQWRQFHVUHWRUQHXQYDORUWUXH
6LQRUHWRUQHXQYDORU)DOVH
)LQ&RQGLFLRQDO)LQ)XQFLyQ
137
)XQFLyQTXHFXHQWDORVGLYH[DFWRVGHXQQXP
HQHOUDQJRUDL]FXDGQXP
GHQHFXHQWDGLYLVRUHVQXPGLY
'HQLFLyQ GH OD
funcin
LI GLYRRUVTUWQXP
6LVHOOHJyDOD
raz cuad
;; entonces reciba lo que devuelva la funcin divisor
envindole
;; como argumento el num y la raiz cuadrada del num
GLYLVRUQXPRRUVTUWQXP
;; 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
FXHQWDGLYLVRUHVQXPGLY
)LQ &RQGLFLRQDO
- Fin Funcin
)XQFLyQTXHGHWHUPLQDVLXQQXPHVSULPRRSWLPL]DGD
GHQHHVSULPRQ'HQLFLyQGHODIXQFLyQ
LI FXHQWDGLYLVRUHV Q 6L HO QXP WLHQH
divisores
UHWRUQH9HUGDGHUR
UHWRUQH)DOVR
)LQ&RQGLFLRQDO)LQ)XQFLyQ
;; Funcin que recibe el rango de evaluacin
GHQHUDQJRQXPLQLWRSH
'HQLFLyQGHIXQFLyQ
LI!LQLWRSH
6LVHOOHJyDOWRSH
EHJLQ
0RVWUDUOtQHDGREOHTXHLQGLTXHQDO
QHZOLQH
GLVSOD\
(begin
;; sino
QHZOLQH
GLVSOD\
GLVSOD\LQL
PRVWUDUHOYDORUHYDOXDGR
'HSHQGLHQGRGHVLHVSULPRRQRXELFDUXQD[HQ
;; la columna correspondiente
LI HVSULPRLQL
(begin
GLVSOD\;
UDQJRQXPLQLWRSH
138
Universidad de Manizales
(begin
GLVSOD\;
UDQJRQXPLQLWRSH
)LQ)XQFLyQ
139
2.2 Aplicacin
El esquema funcional de la solucin algortmica representa la estructura lgica que permite observar las interacciones entre las funciones y
HOXMRPLVPRGHOSURJUDPD)LJXUDGRQGHODIXQFLyQLQWHUID]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.
140
Universidad de Manizales
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
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
GHQHGLYLVRUDE'HQLFLyQGHODIXQFLyQ
LI UHPDLQGHUDE6LHORQXPGLYLGHH[DFWDmente al 1o
HQWRQFHVUHWRUQHXQYDORUWUXH
6LQRUHWRUQHXQYDORUIDOVH
)LQ&RQGLFLRQDO)LQ)XQFLyQ
142
Universidad de Manizales
143
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
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