viernes, 10 de junio de 2011

Cribas y barridos 1. Números intocables

Dos características de la hoja de cálculo apreciamos mucho en este blog. Una es que permite estudios de nivel elemental y medio sin gran preparación previa en los trabajos y la otra su facilidad de presentación de estructuras y procesos matemáticos. Evidentemente, no  la recomendamos para estudios universitarios, aunque también podría dar juego, pero su uso del formato en coma flotante la imposibilita para el tratamiento exacto de grandes números.

Una posibilidad muy atractiva es la de presentar en pantalla resultados de cribas de números y barridos exhaustivos. Lo explicaremos con un ejemplo, el de los números intocables.

Se llaman así a aquellos números que no pueden ser el resultado de la suma de las partes alícuotas de otro número, es decir, de la suma de sus divisores propios. Por ejemplo, el 88 no coincide con ningún resultado de sumar los divisores propios de ningún otro número natural. Si efectuamos un barrido de los N primeros números y anotamos el resultado de esa suma, nunca resultará 88.

Los primeros números intocables son

2, 5, 52, 88, 96, 120, 124, 146, 162, 188, 206, 210, 216, 238, 246, 248, 262, 268, 276, 288, …

http://oeis.org/A005114

Puedes aprender algo sobre estos números en la Red. Por ejemplo en http://mathworld.wolfram.com/UntouchableNumber.html, pero tampoco dan mucho de sí. Se aprenden sus propiedades en pocos minutos. Aquí nos va a interesar su generación y presentación atractiva con hoja de cálculo. Lo haremos con estos pasos:

(1) Presentemos los primeros números naturales en una pantalla de hoja de cálculo, y junto a cada uno escribamos cualquier símbolo, por ejemplo una carita sonriente:




La idea es que cuando encontremos un número que coincida con una suma de partes alícuotas de otro se borre la carita, y al final sólo la conserven los números intocables.

(2) Implementamos la función alícuota(n)

public function alicuota(n)
dim i,s
s=0
for i=1 to n/2
if n/i=n\i then s=s+i
next i
alicuota=s
End function


Esta función recorre los posibles divisores propios, con la prueba n/i=n\i, que equivale a afirmar que el cociente n/i es entero  que por tanto i divide a n. El resto se entiende fácilmente.

(3) Efectuamos un barrido de todos los posibles resultados de la función alícuota(n). Aquí hay un punto delicado y es el rango de cálculo que debemos elegir. Si deseamos encontrar los intocables menores que 100 deberemos buscar resultados hasta casi el 10000. El problema radica en que si un número es del tipo p+1 con p primo, será el resultado de la suma de divisores propios de p2, como puedes razonar si te paras a pensar en ello. Como el máximo primo del 1 al 100 es 97, habrá que llegar más allá de 972=9409.

La idea es que cada vez que salga una suma que equivalga a un número de nuestra tabla le borramos la carita sonriente, simplemente escribiendo sobre ella un espacio en blanco. Esto es muy dinámico, y si lo presentas a unos alumnos se darán cuenta de que sólo los números intocables se libran de que le borren la carita. Es una forma activa de comprender que estamos cribando números.

Para que todo funcione hay que encajar cada número en su fila y columna correspondiente para que localice la carita. Si cada columna contiene 20 números, hallaremos el cociente entero del resultado entre 20 y nos dará la columna y el resto resultante, la fila.

Lo puedes ver en este código (comentarios en cursiva):

sub intocables
dim i,f,c,p


for i=1 to 10000
p=alicuota(i) ‘ p es un resultado posible
if p<=100 then ‘restringimos p a la tabla que hayamos planteado
c=p\20  ‘se calcula la columna
f=p-20*c  ‘se calcula la fila
StarDesktop.CurrentComponent.sheets(3).GetCellByPosition(3+2*c,2+f).string=" "
‘se escribe un espacio en blanco en la celda. En el ejemplo se supone que trabajamos en la hoja 4 y que la tabla comienza en C3. Esta línea de código está adaptada a Calc. En Excel sería
ActiveWorkbook.Sheets(4).Cells(3+f,4+2*c).Value = " "
end if
next i
end sub

Al principio desaparecen las caras a gran velocidad, para ralentizarse después bastante. Las últimas en desaparecer son las de 80, 84 y 98 (¿por qué?). Al final queda así:



Quedan como supervivientes los números intocables.

¿Qué ocurriría si exigiéramos que no coincidieran con la suma de divisores propios, sino con la suma de todos (función SIGMA)? Nos daría una lista (más numerosa) de números intocables de otro tipo. Te dejamos el encargo.