• No se han encontrado resultados

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 y

C

i toman sus valores en los límites

0≤B

i

<

kN

,

0≤C

i

<2⋅

kN

, para

0

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

kN

es siempre periódica, dados los límites entre los que se mueven los valores

B

i y

C

i. Llegaremos a un ciclo cuando tengamos un valor

1

=

i

C

. Una vez se ha alcanzado ese valor, si se siguiera el proceso volveríamos a obtener la misma secuencia de valores

C

i. Si en la búsqueda de relaciones llegamos al caso de cerrar un

Diseñ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ódulo

kN

[Morr75].

6.1.2. Búsqueda de los elementos que forman el conjunto S

Encontrar relaciones o pares

PC

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 subconjuntos

S

de pares

PC

que verifiquen que el producto de todos sus correspondientes

C

i’s resulte un cuadrado perfecto? ¿Cómo saber siquiera

si 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 pares

PC

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 pares

C

P

para los que logremos conocer todos los factores de su correspondiente

C

i. Y no solo eso,

sino que además esos factores primos de los

C

i deberán ser “suficientemente pequeños” (queda

pendiente 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

PC

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

PC

que verifiquen que su correspondiente

C

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 no

consideremos válido el par

PC

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

PC

puede ser considerado candidato a formar parte de un subconjunto

S

será intentar factorizar por completo el correspondiente valor

Diseñ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 de

C

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 valor

C

i,

i≥1

, entonces el valor del símbolo de LEGENDRE

(kN

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

(kN

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 expresiones

C

i calculadas en la expansión por fracciones continuas de

kN

: introducirlo en la

base 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 un

valor 2

i

P

, cuadrado perfecto.

Conviene introducir ahora un nuevo concepto: decimos que un número entero es

B

–suave si

todos 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

PC

, que serán almacenados o desechados según se cumpla que el valor

C

i correspondiente quede completamente factorizado o no por los

primos de la base de factores, es decir, según se cumpla que

C

i sea o no

B

–suave.

Llamamos conjunto

F

al conjunto de estos pares

PC

almacenados. Al cardinal del conjunto

F

(número de relaciones

PC

, con

C

i suave, halladas y almacenadas) lo llamamos

f

.

Una vez halla logrado “suficientes” pares

PC

con

C

i

B

–suave (y más adelante deberemos

concretar ese nuevo concepto de “suficientes”) habrá que localizar subconjuntos

S

.

Llamemos

r

al cardinal de la base de factores. Todos los pares

PC

almacenados cumplen que los valores

C

i tienen todos sus factores entre estos

r

primos, es decir,

=

=

r j j i

p

j

C

1 λ

Donde

λ

j será igual a

0

si el primo

p

j no divide a

C

i, y será igual o mayor que

1

si divide a

C

i

una 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 valores

C

i’s que sean cuadrado perfecto es lo mismo que encontrar un

grupo de valores

C

i’s que verifiquen que la factorización de su producto sea tal que todos los

primos 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 cada

p

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

PC

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 elemento

i

–ésimo de

F

le asociamos su correspondiente vector de exponentes

e

i

=(λ

0

,λ

1

,...,λ

r

)

, donde

1

, si

i

es impar.

=

0

λ

Outline

Documento similar