domingo, 17 de abril de 2011

Proyecto: Informatizar un problema matemático de primaria, Divisores (1 de10)


 Fase 0

No quiero entrar en el contexto por que “sarpullido” me sale.
Indicar, para que nadie se escandalice, que a efectos prácticos para estos comienzos voy a considerar el conjunto de números naturales como un conjunto finito... 
Sí, ya sé que no lo es  pero, antes de meternos en la matemáticas de hablar con Dios, prima el realizar un programa que de solución a un problema al que se recurre mucho en estás matemáticas de LOGSE que a muchos infantes les toca vivir...

El problema acucia a muchos infantes que cursan primaria. Y viene cuando se enfrentan a la pregunta:
De google: "Cara de haba"

'Dado un número X' (X, suele ser tanto mayor, cuanto más elevado es el curso y es un natural que, puede o no, ser primo)' , di todos los naturales divisores del mismo.



Ahí , la madre del Cordero... No indican que dichos divisores deban ser primos y , por tanto, el problema se convierte en un problema complejo que debe resolverese en varias partes.

1.- Hallar La descomposición factorial de X
2.- “Combinarlos”, (todos no, más adelante desarrollaré esto porque tiene su miga), para obtener todos los divisores naturales que, en realidad, al dividir a X producirán un resto 0.



Intentaré, con el siguiente post, ir comentando cómo realizar la fase de análisis informática para dar solución a dicha pregunta.


Fase inicial: Recojo de datos , diccionario , entrevistas , documentación, y tal y tal....

  • Primo: un número natural, X, que es divisible sólo por si mismo y por 1.
  • Divisible: Se dice que un número X, es divisible por otro, Y, cuando al dividir X por Y el resto es 0.
  • Dividir X por Y (ojo esto pues cara a computar debe ser así): Restar a X ún numero de veces, Z, el número Y tal que: X= Z*Y +r , y además , 0<=r<Y. Esta coletilla final nos asegura que hemos llevado la division hasta el final , pues sin ella también podriamos decir que 60 DIV 2= (28*2)+4, hecho que no nos interesa en el mundo informático.
  • Descomposición factorial de X: Muestra de X como el producto resultante de multiplicar los números primos divisores de X cuyo resto sea 0 y tantas veces como lo hagan. Con esta definición acabamos de asegurarnos de que la descomposición de 40 no sea 1*5*2 sino 1*5*2*2*2.
  • Raíz cuadrada de un número X>=0: Aquel número Y, tal que X=Y*Y.
  • Conjunto: Colección de elementos.
  • Conjunto “Descomposición factorial de X”: Es el conjunto formado al tomar como elementos cada uno de los factores (haya sido tomado ya o no) resultantes de la descomposición factorial de X. Así pues, el conjunto ,Q , 'Descomposicion factorial de 40' = {1,5,2,2,2}.
  • Conjunto Pontencia de un conjunto S : Conjunto que tiene por elementos todos los subconjuntos generables en S.
                        Por ejemplo, si S= {a, b, c} entonces el conjunto potencia de S es P(S) = {{ }, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}}.
Podéis encontrar hacia donde quiero ir en :


¿Esto es de primaria?  Menudo lumbreras el que diseño los contenidos , me imagino que con esto quiso mediar los, al menos, dos años de retraso con la EGB que llevan... ,en fin que he dicho que no quería entrar al contexto..., prosigo con el análisis.

Para nuestro ejemplo, si S= {1,5,2,2,2} entonces el conjunto potencia de S es P(S) contendrá 2 elevado a 5 elemntos, esto es, 32 elementos.
Enumero: el conjunto vacío, 5 subconjuntos de 1 elemento, 10 subconjuntos de 2 elementos, 10 subconjuntos de 3 elementos, 5 subconjuntos de 4 elementos y un subconjunto de 5 elementos.




“Combinarlos”:
Una vez obtenido el conjunto descomposición factorial , realizado el conjunto potencia sobre él y desestimado ,de este último, el elemento conjunto vacío....
Sabemos que cada subconjunto contiene como elementos una colección de factores divisores de X.
El valor producido al multiplicar el valor numérico de dichos factores resultara ser un divisor de X.
Como tenemos podemos llegar a la solución … Claro, nos suje un problema y es que, por ejemplo veamoslo en X=40, no quedaría nada bien encontrar 31 valores a saber:
Los resultantes de los subconjuntos de 1 elemento = 1,5,2,2,2
Los resultantes de los subconjuntos de dos elementos=
{1,5}--->5; {1,2}--->2 ; {1,2}--->2 ; {1,2}--->2 ;
{5,2}--->10; {5,2}--->10; {5,2}--->10;
{2,2}--->4; {2,2}--->4;
{2,2}--->4

No cito más por que , ya habréis visto por dónde quiero ir….

Como se ve, hay muchos valores repetidos por lo tanto , solamente nos interesara mostrar , de los 31 resultados que se generarán con X=40 , los que tengan valores distintos; reduciendose el tema a , a saber :
1
2
4=2*2
5
8=2*2*2
10=2*5
20=2*2*5
40=2*2*2*5
Como se ve ostrar 31 resultados cuando de ellos solo 8 nos aportan la informacion requerida queda mal. Algo tendré que hacer al respecto. Pero eso ya no compete al análisis.




De google: 'Idea'

Termino esta fase inicial , añadiendo una observación bastante interesante que, aunque tampoco compete al análisis prefiero nombrarla ahora por tratarse de una pauta interesante que condicionará la producción que queremos realizar para hacerlo de una forma más eficiente:

Como todos recordamos, de cuando descomponiamos con papel y lápiz un numerito aplicabamos los criteros de divisibilidad al número X hasta que obteniamos divisibilidad por ese Y , empezabamos por el 2 (que si era par o impar), el 3 ( que si la suma...) , el 5 (que si terminaba en …), el 7, el 11 y el 13 y si ninguno daba pues tocaba en sexto dividir que si por 17 por 19, por 23, 29, y 31... depende cuan de rebuscado quisiera ponerlo el “ticher”. Si con 31 ya no daba nos dejaban decir que era primo pero, sólo porque asumiamos que el proceso era seguir dividiendo hasta llegar al mismo número si hiciera falta para decir la verdad...
Cuando encontrabamos un divisor dividiamos y repetiamos el proceso.

Ahora con un ordenador no podemos excusarnos en el 31 debemos ir hasta el final y decir si es uno primo . ¿A que llamamos final?


Os propongo la siguiente pauta:
Si tomamos la raiz entera de X , llamémosla W y probamos los primos divisores Z, tal que 1<Z<=W, si ninguno es divisor podemos decir que X es primo.
Es lógico, ¿No? , Sólo había que caer.


Me baso en lo siguiente:
Sea X un número no primo, y X >1.
SUpongamos que la descomposición factorial en primos nos da que X=1*a*b
Donde a y b cumplen que son primos , mayores que 1.
Luego a = X/b y b=X/a, y cuando a> la raiz cuadr5ada de x entonces b debera ser menor que la misma encontrándose la armonía en que X = raiz cuadrada de X* raiz cuadrada de X. Por tanto no trae cuenta buscar primos divisores más allá de la raiz natural de X.
Lo ilustro con el siguiente ejemplo:
X=35=1*5*7
La raiz natural de 35 son 5
Por ello antes de decir si 35 es primo o no , deberemos revisar los primos hasta el 5 inclusive si lo es.
2---> No
3----> No
5--->sí ---> Pues a descomponer toca. 35DIV5=7 (El 5 ya pasa a formar parte de la solución y ahora nos ponemos a trabajar con el resultado, 7, cuya raiz natural es 2).
2--->No ---> entonces el 7 es primo y lo añadinmos a la solución.
X=35=1*5*7

Otro ejemplo
X=551
La raiz natural X es 21
En 19 encontramos el divisor 551DIV19=29
La raiz natural de 29 es 5
2---> no , 3---> no, 5--> no es primo y por tanto 551=1*19*29

Por tanto X= 83 ¿Es primo?
Veamos, la raiz de X es 9
Pruebo divisores primos hasta 9:
2---> No, 3---> No, 5---> No, 7--->No
Luego sí 83 es primo.

Véis? !Acabamos de ahorrarnos muchísimos intentos de encontrar divisores primos!


Un último ejemplo, para que veáis que la idea funciona para cualquier numero, tomemos el 1102,
X=1102=1*2*19*29 . Veamoslo.
La raiz natural de 1102 es 33
Probamos con 2 y si -----> 1102 DIV 2 =551
La raiz de 551 (esto ya lo hemos visto antes así que todo queda ya visto).


Bueno, como véis dicha pauta nos ha ahorrado muchos, muchos , muchisimos intentos y probatinas a la hora de dar con los divisores.

Google: "That's all folks"


Hasta aquí el análisis del problema. Concluida la fase proxima entrada diseño.

No hay comentarios: