POR FRACCIONES CONTINUAS
Algoritmo 1: Algoritmo de BHÁSCARA–BROUNCKER para la generación de los
valores de las secuencias que aproximan un racional a un valor real (raíz cuadrada de un entero dado como entrada del algoritmo). De las cinco secuencias generadas, dos de ellas verifican una relación semejante a la
expresión (3) y son válidas, por tanto, para intentar factorizar el valor de entrada. Recogemos algunas observaciones sobre los valores de las variables y los pasos del Algoritmo 1: 1. Los enteros
B
i yC
i toman sus valores en los límites0≤B
i<
k⋅N
,0≤C
i<2⋅
k⋅N
, para0
≥
n
. Esta afirmación, tomada de [Morr75], nos indica no sólo el límite superior de ambos valores, sino también que ambos valores son siempre positivos, hecho que nos ha simplificado en cierta medida la implementación: recuérdese que, como señalábamos en el Capítulo 4, la estructura que define nuestra variable NUMERO no dispone de un campo para el signo.2. La expansión en fracciones continuas de
k⋅N
es siempre periódica, dados los límites entre los que se mueven los valoresB
i yC
i. Llegaremos a un ciclo cuando tengamos un valor1
=
i
C
. Una vez se ha alcanzado ese valor, si se siguiera el proceso volveríamos a obtener la misma secuencia de valoresC
i. Si en la búsqueda de relaciones llegamos al caso de cerrar unDiseño e implementación del algoritmo de factorización por fracciones continuas 152 [Morr75]. Henri COHEN indica en [Cohe93] que el hecho de que toda secuencia de BHÁSCARA sea periódica resulta completamente irrelevante dado que, excepto para números muy especiales, nunca llegaremos a necesitar computar todos los valores del periodo.
3. Todas las congruencias realizadas en las búsquedas de las relaciones se hacen modulo
N
, y en ningún caso módulok⋅N
[Morr75].6.1.2. Búsqueda de los elementos que forman el conjunto S
Encontrar relaciones o pares
P−C
es tarea sencilla, como se ve. La dificultad del proceso empieza ahora que podemos tener almacenadas un montón de ellas: ¿Cómo entresacar, de todo el vasto conjunto de relaciones, estos subconjuntosS
de paresP−C
que verifiquen que el producto de todos sus correspondientesC
i’s resulte un cuadrado perfecto? ¿Cómo saber siquierasi existe uno solo de esos subconjuntos?
Por suerte, conocemos un método que da respuesta a estas dos cuestiones. Pero una respuesta a un alto precio.
Existe una forma de detectar subconjuntos
S
dentro de la enormidad de posibles paresP−C
candidatos. Para ello debemos exigir una fuerte restricción a los posibles candidatos a formar parte de esos subconjuntos: únicamente podrán formar parte de un subconjunto
S
aquellos paresC
P−
para los que logremos conocer todos los factores de su correspondienteC
i. Y no solo eso,sino que además esos factores primos de los
C
i deberán ser “suficientemente pequeños” (quedapendiente definir de forma precisa ese “suficientemente pequeños”). Por lo tanto, cualquier par
C
P−
que no logre cumplir esta condición será desechado.Grave restricción, pero necesaria si queremos hallar combinaciones de pares
P−C
que nos conduzcan al final de nuestro proceso.Veamos ahora cómo se desarrolla la selección de pares. 6.1.2.1. Factorización de los distintos
C
i’s.Como ya hemos dicho, al menos inicialmente desestimaremos todos los pares
P−C
que verifiquen que su correspondienteC
i tiene un factor primo mayor que el límite prefijado.La cuestión es saber cuándo un factor de
C
i será “demasiado” grande para que noconsideremos válido el par
P−C
correspondiente. Para determinar esto lo que se hace es trabajar con un conjunto de primos todos ellos menores que un valor predeterminado. Al conjunto de estos primos le llamamos base de factores.El procedimiento a seguir para determinar si un par
P−C
puede ser considerado candidato a formar parte de un subconjuntoS
será intentar factorizar por completo el correspondiente valorDiseño e implementación del algoritmo de factorización por fracciones continuas 153
i
C
con los primos de esa base de factores. Si se logra, entonces tenemos que ese par tiene todos los factores primos deC
i “suficientemente pequeños”.Los primos de la base de factores, deben cumplir dos propiedades: 1. todos ellos son menores que un límite superior dado
B
;2. según queda demostrado en [Morr75], si un primo impar
p
divide a un valorC
i,i≥1
, entonces el valor del símbolo de LEGENDRE(k⋅N
p)
ó es 0 ó es 1.Por tanto, la base de factores se escoge entre todos aquellos primos impares menores que el límite dado que verifiquen que
(k⋅N
p)
vale 0 ó 1; el primo 2 siempre forma parte de la base de factores. Cualquier primo que no verifique esta condición no logrará dividir a ninguna de las expresionesC
i calculadas en la expansión por fracciones continuas dek⋅N
: introducirlo en labase de factores no haría más que alargar de forma improductiva el proceso de factorización, pues sabemos seguro que ese primo no podrá dividir a ningún
C
i que sea congruente con unvalor 2
i
P
, cuadrado perfecto.Conviene introducir ahora un nuevo concepto: decimos que un número entero es
B
–suave sitodos sus factores primos son menores que
B
.En nuestro proceso, por tanto, vamos generando, mediante el algoritmo de BHÁSCARA– BROUNCKER antes presentado, pares de relaciones
P−C
, que serán almacenados o desechados según se cumpla que el valorC
i correspondiente quede completamente factorizado o no por losprimos de la base de factores, es decir, según se cumpla que
C
i sea o noB
–suave.Llamamos conjunto
F
al conjunto de estos paresP−C
almacenados. Al cardinal del conjuntoF
(número de relaciones
P−C
, conC
i suave, halladas y almacenadas) lo llamamosf
.Una vez halla logrado “suficientes” pares
P−C
conC
iB
–suave (y más adelante deberemosconcretar ese nuevo concepto de “suficientes”) habrá que localizar subconjuntos
S
.Llamemos
r
al cardinal de la base de factores. Todos los paresP−C
almacenados cumplen que los valoresC
i tienen todos sus factores entre estosr
primos, es decir,∏
==
r j j ip
jC
1 λDonde
λ
j será igual a0
si el primop
j no divide aC
i, y será igual o mayor que1
si divide aC
iuna o más veces.
El nervio principal del método que se emplea para localizar subconjuntos
S
se basa en que encontrar un grupo de valoresC
i’s que sean cuadrado perfecto es lo mismo que encontrar ungrupo de valores
C
i’s que verifiquen que la factorización de su producto sea tal que todos losprimos que intervienen lo hagan un número par de veces. El proceso se centra por tanto en encontrar valores
C
i tales que la suma de sus potenciasλ
j para cadap
j sea par o sea cero.Diseño e implementación del algoritmo de factorización por fracciones continuas 154 Este proceso se realiza mediante la técnica de eliminación gaussiana. En la presentación de este procedimiento queda concretado cuándo podemos decir que tenemos “suficientes” pares
P−C
para decidirnos a iniciar la búsqueda con certeza de encontrar al menos un subconjunto
S
. 6.1.2.2. Proceso de eliminación gaussiana.Para realizar el proceso con eficiencia, introducimos un vector binario que llamaremos vector de exponentes. Además, para llegar a buen fin en el procedimiento de eliminación gaussiana necesitaremos asociar, a cada vector exponente otro que llamaremos vector histórico.
Tomamos la base de factores de forma ordenada,
(p
1,p
2,...,p
r)
. A cada elementoi
–ésimo deF
le asociamos su correspondiente vector de exponentese
i=(λ
0,λ
1,...,λ
r)
, donde1
, sii
es impar.=
0