viernes, 25 de octubre de 2013

Factorización de Fermat en R y Maple

Los números primos son aquellos que no tienen divisores, son los “primeros” de su género. En contraste los números que no son primos son compuestos (los componen números primos). 
El problema de saber si un numero en concreto es primo o no, no es fácil de solventar. El mismo Fermat ideó un algoritmo para determinar si un número es primo o no. 
Me ha hecho gracia escribir un programa en lenguaje R que aplique este algoritmo. Para los interesados aquí este el código en basto. 





Código sin pulir del algoritmo de factorizaron de Fermat para R.

Raw code of Fermat’s factoritation method for R.
#============
#x^2-y^2=n
#x^2-n=y^2
#============
#INTRODUCIR EL NÚMERO A FACTORIZAR

n<-23711

fras<-c("Los factores de ")
fras1<-c(" son ")
fras2<-c(" y ")
p<-sqrt(n)
p3<-trunc(p)
s<-(p3)
fin<-(n+1)/2

for (i in p3:fin){
s=s+1
r<-((s^2)-n)
a<-trunc(sqrt(r))
b<-sqrt(r)
if (a==b){      
            break
        }
    }
#==============================
#y= raíz cuadrada de r. x es s.
#tenemos que X=(a+b)/2. y=(a-b)/2
#ya que ab=n. Y a=x+y, b=x-y
#==============================
af<-s+a
bf<-s-a

paste (fras,n,fras1,af,fras2,bf)



El código funciona bien, pero resulta que R es un software pensado para la estadística y según el número que queramos comprobar nos dice que el cálculo es demasiado grande. Pasa si utilizamos el número: 502.560.280.658.509.
Así pues escribí otro código para Maple (es mi primer código en Maple), que es un software especial para matemáticas. También lo adjunto por si alguien llega aquí por alguna consulta googlena.


Código del algoritmo de factorizaron de Fermat para Maple.
Code of Fermat’s factoritation method for Maple. 

fermatfactor:= proc()
local a, s, fin, n, p, p3, b, r, x, i, af, bf; #variables
printf(`Programa que usa el Algoritmo de Fermat para factorizar`);
printf(`   Introduzca el número a factorizar:`);
n := scanf(%f)[1];
p:=sqrt(n);
p3:=trunc(p);

s:=p3;
fin:=(n+1)/2;
a:=1;
b:=2;
#Bucle
for i from p3 to fin   
while not (a=b) do 
r:=i^2-n;
a:=trunc(sqrt(r));
b:=sqrt(r);od;

x:=i-1;
af:=x+a;
bf:=x-a; 

print(`los factores de`,n,`son`,af,bf);

end:
# NOTA: Hay que llamar a la función con fermatfactor()



Este programa factorizó el anterior número que esta por los 500 billones (con b y europeo –en estados unidos un billón solo son mil millones-) en tres cuartos de hora. Por un teorema (que no expongo), solo nos hace falta buscar números desde el primer número entero cuyo cuadrado sea mayor que el número que queremos factorizar (en este caso 22.417.857) hasta el número a factorizar más uno y entre dos, es decir 251.280.140.329.255.



En resumen, el programa lo que hace es probar una ecuación, número a numero desde 22.417.857 a 251.280.140.329.255 en el peor de los casos. Para este número se evaluaron los números hasta el  23.969.353, es decir, tan solo un poco más de millón y medio de comprobaciones. 

domingo, 20 de octubre de 2013

Curiosidad tolquiana béricomusical

Hace mucho tiempo, antes de la espectacular adaptación de Peter Jackson, los únicos ecos folclóricos de la obra tolquiana eran una peli de dibujos del 78 y el Señor de los Chupetes de Superlopez. 
Desde esa época en las ruinas de mi memoria vivía el recuerdo de una canción ochetera que versaba sobre el Señor de los Anillos. Largos han sido los años que han transcurrido para que, mi memoria, mi recuerdo, se reencuentre con su causa, con su creador y de alguna forma se extinga y renazca (paradógicamente). 
Se trata del grupo de pop “La dama se esconde” con el tema “Magia”.


jueves, 17 de octubre de 2013

Tutor o mentor


En algunas disciplinas prácticas es indispensable que los alumnos tomen contacto con el mundo profesional para que su formación se complete. Mientras más técnica y abstracta menos aplicación se espera de ella, tanto es así que existen ramas de las ciencias físicas o de las matemáticas que se las considera puras y en las que nadie espera que se obtenga algo directamente práctico.

En contraste, como ejemplo de disciplina práctica, me resulta impensable que una enfermera termine su formación si tener un contacto directo con los pacientes. La enfermería tiene un gran componente “humano”, incluso teatral cuando ha de actuar dentro de un sistema de salud.    En definitiva y en general la enfermera cuida al que no puede hacerlo y aunque no es una disciplina sesuda que intente desenmarañar la realidad su aprendizaje y práctica son una tareas complejas que no es posible asimilar de forma puramente intelectiva.

Eso no quiere decir que la enfermería deba sentirse acomplejada, de hecho si la enfermería redescubriera algunas impresionantes joyas intelectuales de su pasado y tuviera el valor de aplicar rigor a las preguntas que se hace y no esconderse tras un patético misticismo no tendría parangón.

Aceptando lo dicho, el profesional que guía al alumno en su contacto con el mundo profesional esta pobremente definido con el termino “tutor”, que viene a ser la “Persona encargada de orientar a los alumnos de un curso o asignatura.” [1], la Universidad Nacional Autónoma de México indica a sus tutores que este tiene que favorecer el desarrollo de habilidades y actitudes para el estudio y no solamente la adquisición de conocimientos [2]. El termino tutor tiene un enfoque eminentemente académico.

En contraste, el término “mentor” que viene a ser, “consejero o guía” [3], refleja un aprendizaje más práctico dentro de una relación formal. Un caso clásico de mentoría es la relación maestro aprendiz en los gremios medievales por la que el neófito aprendía los entresijos del oficio.

Se puede objetar que esta idea diera a entender que la enfermería es más un oficio que una profesión. Y esa réplica miope tendría su parte de razón puesto que parte de oficio tiene la disciplina. Pero, tal como un matemático no se avergonzará de reconocer que ha tenido que aprender la parte de oficio que tiene su profesión, la enfermera no ha de despreciar la parte de saber hacer por el mismo hacer de su profesión. Más mecánica e irreflexiva, sí, pero también más pulida por la propia ecología de las conductas (las conductas también están sujetas, por así decirlo a una especie de “selección natural”).

Así, la persona que recibe la mentoría [3], entendida como una relación de desarrollo personal en que una persona más experimentada o con mayor conocimiento ayuda a otra menos experimentada o con menor conocimiento a través de consejos prácticos o por modelado, viene a ser el aprendiz o discípulo. 

Para concluir, se puede decir que el tutor, instruye al alumno en su estudio de las bases de la disciplina mientras que el mentor guía al aprendiz para que sus primeros trabajos lleguen a buen puerto. Visto lo visto, entonces, ¿no sería más apropiado mentor de prácticas que tutor de practicas?


[1] Diccionario de la RAE
[3] http://es.wikipedia.org/wiki/Mentor%C3%ADa

jueves, 10 de octubre de 2013

Ejercicios fermatianos


Un ejercicio de teoría de números (matemáticas discretas) de la UNED. 

Demuestre que el cuadrado de cualquier entero es representable como \(3k\) ó \(3k+1\). 

Por el teorema o algoritmo de la división, sabemos que todo número puede representarse como \(3k, 3k+1\) ó \(3k+2\). Ahora vamos a mostrar los cuadrados de esos números. 
Recordemos que \((a+b)^2=a^2+2ab+b^2\). $$(3k)^2=9k^2=3(3k^2)=3k´$$ $$(3k+1)^2=9k^2+6k+1=3(3k^2+2k)+1=3k´+1$$ $$(3k+2)^2=9k^2+12k+4=9k^2+12k+3+1=3(3k^2+4k+1)+1=3k´+1$$ 

Veamos la otra parte del ejercicio. 
Demuestre que el cubo de cualquier entero es de la forma \(9k,9k+1\) ó \(9k+8\). 

 Vamos ha hacer algo parecido al caso anterior, en primer lugar pienso en alguna serie de números como los anteriores que elevados al cubo den la solución pedida. Supongo que en teoría se podrían utilizar diferentes series de números de partida (si la cosa cuadra, cuadrará para todos los números, ahí está la gracia de las demostraciones). Empezaré por lo primero que se me ha ocurrido y que resulta que ha funcionado, después lo probaremos de otra forma a ver si también chuta. Cualquier número entero puede presentarse como \(6k, 6k+1,6k+2,6k+3, 6k+4\) ó \(6k+5\). Nos ha de resultar que podamos poner los cubos de esos números en las formas que nos piden en el enunciado. Vamos pues a la faena. Recordemos también que \((a+b) ^3=(a+b)^2•(a+b)=(a^2+2ab+b^2)(a+b)=a^3+3a^2b+3ab^2+b^3\). 
Desarrollando.
$$(6k)^3= 36k^3=9(4k^3)=9k´$$ $$(6k+1)^3=(6k)^3+3(6k)^2•1+3(6k)•1^2+1^3=36k^3+108k^2+18k+1=9(4k^3+12k^2+2k)+1=9k´+1$$ $$(6k+2)^3=(6k)^3+3(6k)^2•2+3(6k)•2^2+2^3=36k^3+216k^2+72k+8=9(4k^3+24k^2+8k)+8=9k´+8$$ $$(6k+3)^3=(6k)^3+3(6k)^3•3+3(6k)•3^2+3^3=36k^3+324k^2+162k+27=9(4k^3+36k^2+18k+3)=9k´$$ $$(6k+4)^3=(6k)^3+3(6k)^3•4+3(6k)•4^2+4^3=36k^3+432k^2+288k+64=9(4k^3+48k^2+32k+7)+1=9k´+1$$ $$(6k+5)^3=(6k)^3+3(6k)^3•5+3(6k)•5^2+4^3=36k^3+540k^2+450k+125=9(4k^3+60k^2+50k+13)+8=9k´+8$$
 De este modo vemos que es cierto lo que postula el enunciado. Como decía antes, voy a probar si es posible hacerlo más simple corto, después de todo ha de funcionar con todo número ¿no? Ya es sabido que con \(3k, 3k+1\) ó \(3k+2\) podemos representar cualquier número. Hacemos lo mismo que antes: $$(3k)^3=9k^3=9k´$$ $$(3k+1)^3=(3k)^3+3(3k)^2•1+3(3k)•1^2+1^3=9k^3+27k^2+9k+1=9(k^3+3k^2+k)+1=9k´+1$$ $$(3k+2)^3=(3k)^3+3(3k)^2•2+3(3k)2^2+2^3=9k^3+54k^2+36k+8=9(k^3+6k^2+4k)+8=9k´+8$$ E igualmente hemos demostrado lo que se pedía (con bastante menos curro).

martes, 8 de octubre de 2013

Cura y tratamiento

Entonces, extendiendo él la mano, le tocó, diciendo:
Quiero; sé limpio. Y al instante la lepra se fue de él.
Lucas 5:13

Buscando un milagroso remedio para mi, ya extinguido, resfriado encontré que la Wikipedia afirma que éste no tiene cura.
Y puesto que en principio y públicamente no creo en milagros, creo que importante señalar la diferencia entre no tener cura y no tener tratamiento. Veamos un ejemplo.
 
El resfriado tiene cura, pero no tiene tratamiento. Es decir, nos curamos de él pese a que no exista un tratamiento medico que lo combata realmente.
En contraste, el SIDA sí tiene un tratamiento médico eficaz y sin embargo, al menos hasta la fecha, no tiene cura.