Está en la página 1de 15

3.

- Generación de números aleatorios

Una vez construido un modelo, debemos experimentar sobre él y para poder ejecutarlo
necesitamos dar valores a las variables de tipo exógeno. De esta forma podremos obtener valores de
salida y pasaremos a realizar un análisis de los mismos. Algunas de las variables de entrada son de
tipo aleatorio por lo que se tendrán que generar valores que simulen dichas entradas. Para generar
variables aleatorias que sigan determinadas funciones de probabilidad necesitamos partir de series de
números que cumplan ciertas características de aleatoriedad. La generación de dichos números es lo
que se va a abordar en este tema.

3.1.- Introducción
Es grande al necesidad de usar números aleatorios y son muchas las aplicaciones que
requieren de ellos, tales como:

• Simulación: para simular las entradas de aquellas variables aleatorias (no


determinístic as).
• Juegos o teoría de decisiones.
• Cálculo numérico: por ejemplo en la resolución de integrales.
• Teoría del muestreo: aquellos casos en los que sea demasiado costoso realizar la
muestra.
• Programación: generación de entradas para realizar las pruebas de los algoritmos y
programas.
Antes se ha hecho referencia a “número aleatorio”, en realidad no se puede hablar de la
aleatoriedad o no aleatoriedad de un número aislado, sino de éste en relación con otros, es decir, la
aleatoriedad es una característica que posee o no una serie de números. A partir de esta aclaración
Generación de números aleatorios

siempre que nos refiramos a un número aleatorio estaremos hablando de un número perteneciente a
una serie aleatoria.

3.2.- Generadores de números. Tipos


Las características deseables para los generadores de números aleatorios son las siguientes:

• Los números generados no se deben repetir frecuentemente (en ciclos).


• Las series generadas deben ser reproducibles.
• Rapidez en la obtención de los números.
• Almacenamiento mínimo. Tanto el propio generador como los números por el
generados.
• Los números generados han de estar uniformemente distribuidos (todos deben tener la
misma probabilidad de salir).
• Los valores generados deben ser independientes unos de otros, es decir, que la
obtención de cierto valor no esté condicionado por los valores obtenidos anteriormente.
Vamos a ver distintos métodos y para cada uno evaluaremos cuáles de las características
descritas arriba cumple y cuáles no.

1) Manual. Por ejemplo , lanzar un dado o realizar extracciones con reemplazamiento de


bolas numeradas dentro de una urna.

Ventajas:

- Las series obtenidas son realmente aleatorias.

Inconvenientes:

- Lentitud.

- Las series obtenidas son irreproducibles.

- Requieren gran cantidad de almacenamiento ya que habría que almacenar la serie


obtenida.

2) Tablas . (De hasta 100000 números).

Ventajas:

- Las series obtenidas son reproducibles.

Inconvenientes:

- Lentitud.

- Requieren gran cantidad de almacenamiento.

52
Generación de números aleatorios

3) Computación analógica. Las series se obtienen mediante fenómenos físicos.

Ventajas:

- Las series obtenidas son realmente aleatorias.

- Rapidez.

Inconvenientes:

- Las series obtenidas son irreproducibles.

4) Computación digital. Dada una función y una semilla, se van generando los números
aleatorios.

Ventajas:

- Rapidez.

- Pocos requerimientos de almacenamiento.

- Las series obtenidas son reproducibles.

Inconvenientes:

- Los números obtenidos no son independientes.

Nosotros, nos vamos a centrar en la utilización de éstos últimos. Por tanto, vamos a entender
por Generador de números aleatorios, un código al que vamos a llamar cada vez que necesitemos una
aproximación a un número aleatorio.

En 1946, Von Neumann propuso un método para obtener números aleatorios de k-cifras, a
partir de una semilla. Dicho método es conocido como Método de los cuadrados centrales.

El método consiste en partir de una semilla y elevarla al cuadrado, el siguiente número de la


serie se obtendría como resultado de extraer las k-cifras centrales del cuadrado obtenido y así
sucesivamente.

El problema que presenta este método es que los ciclos se producen rápidamente.

3.3.- Generadores congruenciales lineales


Nos vamos, pues, a centrar en los métodos de computación digital. A los números obtenidos
mediante dichos métodos se les conoce como números pseudoaleatorios, dado que, como se ha
mencionado más arriba, los números obtenidos están uniformemente distribuidos pero no son
independientes. Vamos a generar números uniformemente distribuidos en el intervalo (0,1) (U(0,1)),
dado que es fácil pasar desde ellos a otros que estén en otro intervalo.

53
Generación de números aleatorios

3.3.1.- Introducción
Hacia 1949, Lehmer introduce un método de generación de números aleatorios mediante el
cual un término de la serie se obtiene como función del término inmediatamente anterior (xn =f(x n-1)).
La función aplicada es la siguiente:

x n +1 = (ax n + c ) mod m , siendo 0 ≤ x n < m ∀n

En el generador distinguimos cuatro elementos:

• x0 , es el valor inicial o semilla.


• a, multiplicador, siendo 0 ≤ a < m .

• c, incremento, siendo 0 ≤ a < m .

• m, módulo.
Se llama periodo a la subcadena, dentro de la serie generada, en la que no hay repeticiones de
números y longitud de periodo al número de elementos de dicha subcadena.

La repetición de números en la serie puede ser aleatoria, pero dado el método utilizado para la
generación de las mismas, en el momento en el que se repite un valor ya empieza a repetirse todo el
periodo, por lo que interesan métodos que garanticen longitudes de periodo grandes.

3.3.2.- Tipos de Generadores congruenciales lineales


Podemos distinguir dos tipos de estos generadores que se diferencian en el valor del
incremento.

• G.C. Multiplicativos. En ellos el incremento, c, es 0. Este tipo de generadores fueron los


introducidos por Lehmer, aunque mencionó como posibilidad la idea de tomar c≠0.
x n+1 = ax n mod m

• G.C. Mixtos. En ellos el incremento es distinto de 0. Fueron introducidos por Thomson


hacia 1958.

x n+1 = ( axn + c ) mod m


Los primeros presentan la ventaja de ser más rápidos, al tener que realizar menos operaciones
en el cálculo de los elementos. Sin embargo, la longitud de periodo que se alcanza en las series
generadas por ellos son menores que la alcanzadas en las series generadas por los segundos.

Los valores de a=0 y a=1, producen series no aleatorias.

Supongamos a=0, nos quedaría el generador de la forma x n +1 = c mod m , es decir, que


siempre saldría la constante c.

Si a=1, el generador es x n +1 = ( x n + c ) mod m .Desarrollando algunos de los elementos que se


van obteniendo, tenemos:

54
Generación de números aleatorios

x1 = ( x0 + c ) mod m

x 2 = ( x 1 + c ) mod m = ((x 0 + c) mod m ) mod m = ( x 0 + 2c ) mod m

x 3 = ( x 0 + 3c ) mod m

y así para todos los términos. Vamos obteniendo que un término es siempre la semilla más un múltiplo
de c y todo módulo m, y esta serie no es aleatoria.

Puede interesarnos dotar de más independencia a los valores obtenidos. Esto lo podemos
conseguir no obteniendo todos los valores consecutivos de una serie sino obteniendo valores de k en k
posiciones, es decir a partir de un elemento xn no obtenemos el elemento xn+1 sino el elemento xn+k.
Para ello tendremos que elegir:

x0 ’=x0

a ’=a k

ak −1
c'= c
a −1

m’=m

Demostración: tenemos que x n +1 = (ax n + c ) mod m , obteniendo nuevos


términos: x n +2 = (axn +1 + c ) mod m = ((a( axn + c ) mod m) + c ) mod m = (a 2 x n + ac + c ) mod m
xn +3 = (ax n+ 2 + c) mod m = ((a (a (ax n + c) mod m) + c) mod m) + c) mod m =
= (a 3 xn + a 2 xn + ac + c) mod m

En general

ak −1
x n +k = (a k x n + a k −1c + a k − 2c + L + ac + c ) mod m , operando queda : x n +k = (a k x n + c ) mod m ,
a −1

Esto también se puede utilizar para paralelizar la obtención de los términos. Si tenemos un
ordenador con procesamiento paralelo, podemos, partiendo de la semilla asignar a cada procesador la
generación de una subsecuencia de términos. Por ejemplo con tres procesadores se irían generando los
términos de la siguiente forma:

x0

x1 x2 x3

x4 x5 x6
.........................

55
Generación de números aleatorios

Así a partir de un número no tenemos que generar el siguiente término sino el que hay k-
posiciones después de él.

3.3.3.- Elección del módulo


Nuestro objetivo es generar series con el mayor número posible de elementos, es decir series
con máxima longitud de periodo. Para ello, el módulo que se elija para el generador ha de ser grande
dado que ∀ x elemento de la serie se cumple que 0≤x<m, es decir, la longitud de periodo va a ser m
como máximo.

Por otro lado nos interesa que la obtención de la serie se realice de forma rápida. Dado que en
el método que estamos tratando se ha de realizar un módulo, consistente en una división, que es
comparativamente la operación más lenta, podemos encontrar valores de módulo que simplifiquen
dicha operación. Si en un sistema decimal elegimos como módulo m=10k, la operación módulo
aplicada a un número, consistiría simplemente en quedarnos con las últimas k últimas cifras de dicho
número. Al trabajar el ordenador en un sistema binario, la operación se logra realizar con rapidez si se
elige un módulo de la forma m=2 e, y el módulo va a consistir en tomar las e últimas cifras del número.

Uniendo los dos aspectos anteriores nos interesa un elegir como módulo un números de la
forma 2 e y que sea lo más grande posible, siempre y cuando sea posible su representación en el
ordenador. Por tanto si consideramos que w es el mayor número representable, tomaremos un e tal que
2 e sea lo más próximo a w (2 e≤ w).

Esta elección de módulo presenta, no obstante, un inconveniente: las cifras menos


significativas del número no se forman de manera tan aleatoria como las posiciones más altas (las
cifras más bajas ciclan más rápidamente que las más altas). Esto se demuestra observando que las
posiciones más bajas forman una subsucesión cogruencial lineal de periodo menor que el de las cifras
más altas (2 e).

Demostración: sea m=2e y r<e⇒2r /2 e

y n = x n mod 2 r , es la sucesión de los r-cifras más a la derecha de xn

x n +1 = (ax n + c ) mod m

y n +1 = x n+1 mod 2 r = ((axn + c ) mod m) mod 2 r = (ax n + c ) mod 2 r =

(por ser 2 r divisor de m)

= ((axn mod 2 r ) + c ) mod 2 r = (ay n + c ) mod 2 r

queda demostrado que la sucesión {yn } es una sucesión congruencial lineal, su periodo
máximo es 2 r , mientras que el periodo máximo de la sucesión {xn } es m=2 e que es un periodo mayor.
Esto significa que las r-últimas cifras de los elementos ciclan más rápidamente.

56
Generación de números aleatorios

Para evitar este inconveniente, si nos interesa que las cifras más bajas se comporten de forma
más aleatoria, podemos tomar como módulo:

 m , n º primo tal que m < w ó



 m = 2 ±1
e

para que así se tengan pocos divisores que son los que dan los problemas.

En la mayoría de las aplicaciones, los bits menos significativos no son importantes y es buena
una elección de m=2 e=w.

3.3.4.- Elección del multiplicador e incremento


En esta sección vamos a estudiar las propiedades de a y c para que su elección nos garantice la
obtención de un periodo máximo, lo cual no implica que la serie obtenida sea aleatoria.

Si tomamos m de la forma m=P1 ∗P2 ∗....∗Pn (siendo Pi factor primo de m), sólo se obtendrá
periodo máximo con a=1, valor con el que quedaba demostrado que la serie obtenida no era aleatoria.
Se buscará un módulo de la forma m = P1k1 ∗ P2k 2 ∗L ∗ Prk r , lo cual nos permitirá jugar con los valores
de a y c.

Teorema 1.

Para que un generador congruencial lineal mixto genere series con longitud de periodo
máximo m, se deble cumplir:

1) c y m sean primos relativos (c<m).

2) a sea múltiplo de los factores primos de m; a-1=k(P1∗P2 ∗....∗Pr ), siendo Pi factor primo
de m.

3) Si m es múltiplo de 4, a-1 también debe serlo (si m=k4⇒ a-1=k’4).

Vamos a ver que son amplias las posibilidades de elección de a y c para que se cumpla el
teorema anterior.

Por la primera parte, se ha de cumplir que el mcd(c,m)=±1, luego dado un m se pueden tomar
como posibles valores de c:

n
ϕ ( m) = ∏ ( P − 1) P
i =1
i i
ei −1

Según la segunda parte a-1 debe ser múltiplo de los factores primos de m. Si m=P1 ∗P2
∗....∗Pn , entonces debe ocurrir que a-1=k(P1∗P2 ∗....∗Pn )=km, por otro lado sabemos que a<m:

a < m ⇒ a − 1 < m
 ⇒ k = 0 ⇒ a =1
a −1 = k m 

57
Generación de números aleatorios

Vemos que tomar módulos de esta forma no interesa. Por el mismo razonamiento no interesa
un módulo de la forma m=P.

Por lo anterior nos vamos a centrar en módulos de la forma


m = P1k1 ∗ P2k 2 ∗ L ∗ Prk r Pm ∗ L ∗ Pn . Si esto es así, entonces debe cumplirse por la segunda
condición del teorema a − 1 = k ( P1 ∗ P2 ∗ L ∗ Pr ∗ Pm ∗ Pn ) , por otro lado sabemos que a-1<m por
tanto:

a − 1 = k ( P1 ∗ P2 ∗ L ∗ Pr ∗ Pm ∗ Pn ) < m = P1k1 ∗ P2k2 ∗ L ∗ Prkr Pm ∗ L ∗ Pn


⇒ k < P1k1 −1 ∗ P2k 2 −1 ∗ L ∗ Prk r −1 ;

El resultado anterior nos ofrece el rango de posibles valores para k y de ahí se puede obtener el
número de posibles valores de a.

Si m=2e y e≥2 ⇒ m=k*4, al ser múltiplo de 4 por la tercera condición del teorema se
restringen las posibilidades de a y ahora sólo sirven aquellos valores que garanticen que a-1=k*4.

Como a-1<m, a-1=k’*4<2e ⇒ k’<2 e-2 , que son las posibles elecciones de k’ y por tanto de a.

Como se ha mencionado anteriormente el teorema garantiza que el periodo de la serie sea


máximo pero no que la serie obtenida sea aleatoria.

En el caso de un generador lineal multiplicativo (c=0), no se puede verificar la primera


condición del teorema 1, por lo que la longitud de las series obtenidas nunca podrá ser el máximo m.
El teorema siguiente nos dirá qué valores elegir para este tipo de generadores.

Teorema 2.

En un generador congruencial multiplicativo se alcanza periodo máximo λ(m) si y sólo si se


cumple:

1) x0 y m son primos relativos (mcd(x0 ,m)=±1)

2) a es raíz primitiva módulo m.

Demostración del primer apartado:

Supongamos que no son primos relativos entonces

∃ d tal que d / x0 y d / m ⇒ x0 = k ∗ d ; m = k '∗d


sustituyendo en la serie

x1 = a (k ∗ d ) mod ( k '∗d ) = a ∗ k ∗ d − k '∗d = (a ∗ k − k ' ) ∗ d



extendiendo esto a cualquier término de la serie, x n = k ∗ d ∀n ∈ N , por tanto los términos
que vamos obteniendo son los múltiplos de d, el divisor de ambos. Por lo cual interesa que sean
primos relativos.

58
Generación de números aleatorios

Las posibilidades de elección de x0 para que se cumpla la primera condición del teorema son
n
ϕ ( m) = ∏ ( P − 1) P
i =1
i i
ei −1

Teorema 3.

Sea m=p e, a es raíz primitiva módulo m sii

1) si p=2 ⇒ si:

• e=1⇒ a debe ser impar.


• e=2⇒ a mod 4 debe ser 3.
• e=3⇒ a mod 8 debe ser 3, 5 ó 7.
• e≥4⇒ a mod 8 debe ser 3 ó 5.
2) si p es impar ⇒ si:

a ≠ 0 mod p
• e = 1 ⇒#  p −1 / q
a ≠ 1 mod p con q divisor primo de p − 1

#
• e >⇒  p−1
a ≠ 1 mod p
2

3.4.- Otros métodos


3.4.1.- Generadores Cogruenciales Cuadráticos

Son del tipo x n+1 = ( dxn2 + axn + c ) mod m . La longitud de periodo máxima que se alcanza
con ellos es m, igual que en el caso del G.G.L mixto y sin embargo ha de realizar más operaciones que
éste.

Teorema 4.

Para obtener longitud máxima de periodo (m) en un generador congruencial cuadrático, se ha


de cumplir:

1) c y m deben ser primos relativos.

2) d y a-1 han de ser múltiplos de todos los factores primos impares de m. (Si m=2 e⇒a-
1=d=1).

3) Si:

d ≡ (a − 1) mod 4
• m = k4 ⇒ 
d debe ser par

59
Generación de números aleatorios

d ≡ (a − 1) mod 2
• m = k2 ⇒ 
d debe ser par
4) Si m=k9 ⇒

 o bien d ≡ 0 mod 9

 ó  a ≡ 1 mod 9
 cd ≡ 6 mod 9

Se puede definir también el G.C.L. generalizado como

x n = ( a1 x n−1 + a 2 x n−2 + L + a k x n− k ) mod m .

La filosofía de dicho método consiste en utilizar más de un elemento de la sucesión para


generar un nuevo término.

3.4.2.- Métodos Aditivos


Hasta ahora hemos visto generadores que producían números en los que cada término depende
del anterior. Ahora vamos a ver otro tipo de generadores en los que para generar un nuevo término se
utilizan dos elementos anteriores.

En este caso la longitud máxima de periodo que se puede alcanzar es mayor, dado que para
que se produzca un ciclo es necesario que se repitan parejas de números.

xn = xn+ k 
 ⇒ longitud máx ima de periodo = m
2

xn −1 = xn−1+ k 
El primer generador de este tipo fue creado en los años 1950 y es la sucesión de Fibonacci:

x n+1 = ( x n−1 + x n ) mod m

Ofrece una longitud de periodo mayor que m, pero los test han demostrado que los números
producidos no son satisfactoriamente aleatorios.

Green introdujo el siguiente generador:

x n+1 = ( x n + x n− k ) mod m

Demostró que para k≤15 dicho generador no pasaba bien los test de aleatoriedad pero que para
k≥16 sí se portaba bien.

Mitchell y Moore (1958) introdujeron el siguiente generador:

x n+1 = ( x n− 24 + xn− 55 ) mod m ; n ≥ 55

Se ha de cumplir:

60
Generación de números aleatorios

• m debe ser par.


• Se han de generar de forma aleatoria 55 semillas, desde x0 hasta x54 , de forma que todos
ellas no sean pares.
Este método tiene una longitud de periodo grande y al ser simplemente aditivo y no utilizar
multiplicadores, es rápido.

Son muchas las posibilidades para implementar este método. Una de ellas utiliza un array con
55 elementos:

Para n=1 hasta 54 hacer


Y[n]ßx55-n
Fin_para
jß24; kß55
Mientras no fin
Y[k]ß(Y[k]+Y[j]) mod 2e
Salida Y[k]
jßj-1
kßk-1
Si j=0
Entonces jß55
Si k=0
Entonces kß55
Fin_mientras

Este algoritmo utiliza el array como si tuviese forma circular, de este modo siempre se tienen
guardados los 55 valores que son necesarios para ir calculando los siguientes. Este es un generador
bastante bueno.

3.4.3.- Métodos Mixtos


Estos métodos generan series de números aleatorios a partir de otras dos series:

Z n = ( X n + Yn ) mod m .

Sea L1 la longitud de periodo de la serie Xn (Lp(Xn )) y L2 la longitud de periodo de la serie Yn ,


si se cumple que mcd(L1 , L2 )=±1⇒ (Lp(Zn ))= L1*L2.

Utilizando este método el hecho de que se repita un número no implica que la serie empiece a
ciclar, tal y como ocurría con los G.C.L., ya que ahora interviene otro número de otra serie.

No es conveniente utilizar el mismo método para generar las dos series de partida.

3.4.4.- Métodos de Mezcla


Este tipo de métodos intentan desorganizar los elementos de una serie generada, de forma que
se pueda eliminar la posible dependencia entre términos.

61
Generación de números aleatorios

Vamos a ver dos de estos métodos:

3.4.4.1.- Mezcla I

Fue introducido por Mclaren y Marsaglia. Este método utiliza dos series de números
aleatorios. La idea es utilizar un generador para permutar la salida producida por otro generador. De
esta forma se consigue enmascarar la dependencia funcional que existe entre un número y el siguiente
dentro de una serie generada. Dados dos métodos (o series ya generadas) {Xn } e {Yn } el método
produce una sucesión más aleatoria mediante permutaciones en la primera ocasionadas utilizando la
segunda (se obtienen los valores de la primera pero en un orden diferente).

Proceso:

Partimos de dos series {Xn } e {Yn } y vamos a desordenar a primera con la ayuda de la
segunda.

El módulo tomado para la generación de las series no tiene por qué ser el mismo. Vamos a
suponer que el módulo utilizado para la generación de la primera es m y para la generación de la
segunda es m’, por lo que 0≤xi <m y 0≤yi <m’ ∀ i.

Tomamos los k primeros elementos de la primera serie (desde x0 hasta xk-1 ) y los almacenamos
en un array. Ahora con un elemento de la segunda serie tendremos que seleccionar uno de los
 ky 
elementos del array, para ello tomamos el elemento y0 y obtenemos la posición j = E  0  (se hace
 m' 
esta transformación dado que los elementos de la segunda serie están en el intervalo [0, m’-1] y las
posiciones del array van desde la 0 hasta la k-1). El valor almacenado en el array en dicha posición j
va a ser el elemento de la nueva serie que vamos generando y el hueco dejado por él se sustituye con
el siguiente elemento no almacenado de la primera serie, el xk . El proceso se va repitiendo tomando
cada vez el siguiente elemento de la segunda serie para seleccionar posición y rellenando ésta con el
siguiente de la primera serie.

De esta forma se obtienen los elementos de la primera serie, pero reordenados con la ayuda de
la segunda con lo que se está dotando de más independencia a los mismos.

Algoritmo:

Para j=0 hasta k-1 hacer


V[j]ßxj
Fin_para
iß0; jßk
Mientras no fin
Xßxj ; Yßyi
hßEnt(k*Y/m’) (m’ es el módulo de {Yn} )
Salida V[h]
V[h]ßX
jßj+1; ißi+1
Fin_mientras

62
Generación de números aleatorios

En la mayoría de las situaciones de interés, la sucesión resultante es más aleatoria que la


original {Xn }, y además la longitud de periodo de la nueva serie es el mínimo común múltiplo de las
longitudes de periodo de {Xn } e {Yn }.

3.4.4.2.- Mezcla II

Fue introducido por Carter Bays y Durham. Es un método parecido al anterior a diferencia de
que sólo utiliza una serie de números {Xn }. Mejora la aleatoriedad de la serie original con un costo
muy pequeño.

Proceso:

En este caso partimos de sólo de una serie {Xn } y vamos a desordenarla utilizando los
elementos de la misma serie.

Vamos a suponer que el módulo utilizado para la generación de la serie es m por lo que
0≤xi <m ∀ i.

Tomamos los k primeros elementos de la serie (desde x0 hasta xk-1 ) y los almacenamos en un
array. Ahora con el siguiente elemento no utilizado tendremos que seleccionar uno de los elementos
kx 
del array, para ello tomamos el elemento xk y obtenemos la posición j = E  k  (se hace esta
 m 
transformación dado que los elementos de la serie están en el intervalo [0, m-1] y las posiciones del
array van desde la 0 hasta la k-1). El valor almacenado en el array en dicha posición j va a ser el
elemento de la nueva serie que vamos generando. El hueco dejado por él no lo rellenaremos con el
elemento utilizado para seleccionar la posición dado que si así lo hiciésemos elementos pequeños
seleccionarían posiciones bajas del array que se irían completando con dichos elementos y los
elementos grandes se irían a posiciones altas en el array, quedando por tanto el array ordenado en
cierta manera. Para evitar esto que quitaría aleatoriedad a la serie que se está generando, lo que
hacemos es utilizar el elemento xk+1 (no utilizado hasta el momento para rellenar el elemento dado
como salida) y en pasos siguientes se va utilizando el elemento dado como salida para seleccionar la
siguiente posición en el array y el hueco dejado tras la salida se va completando con el siguiente
elemento no utilizado de la serie.

De esta forma se obtienen los elementos de la serie pero en desordenados, con lo que se está
dotando de mayor independencia a los mismos.

Algoritmo:

Para j=0 hasta k-1 hacer


V[j]ßxj
Fin_para
Yßxk
Mientras no fin
hßEnt(k*Y/m) (m es el módulo de {Xn} )
YßV[h]
Salida Y

63
Generación de números aleatorios

jßj+1
V[h]ßxj
Fin_mientras

3.5.- Apéndice. Teoría de números


1) Se dice que a es divisible por b si ∃ c tal que a=bc

a = b (a es múltiplo de b)

b/a (b es divisor de a)

2) p es primo si sólo es divisible por ±1 y por ±p.

3) Dados a, b ∈ Z+ se llama mcd(a,b)=c (máximo común divisor) tal que c/a y c/b y si ∃ d ∈
Z+ tal que d/a y d/b ⇒ d/c.

4) Dados a, b ∈ Z+ se llama mcm(a,b)=c (mínimo común múltiplo) tal que a/c y b/c y si ∃ d
∈ Z+ tal que a/d y b/d ⇒ c/d.

5) Dados a, b ∈ Z+ se dicen que son primos relativos si mcd(a,b)=1.

6) Se define ψ(m) (Phi de Euler) de m, como la función que nos dice el número de primos
relativos con m. ψ(m)=m-1 para m primo.

7) Cualquier m∈Z+ , se puede escribir como producto de potencias de números primos:

n
m= ∏P
i =1
i
ei
, con P primo

8) Dado cualquier m
n
ϕ (m ) = ∏ ( P − 1) P
i =1
i i
ei −1
,

9) a es congruente con b módulo m (a≡b) si a − b = m

10) Propiedades de los módulos:

a) ((a mod m)+b) mod m=(a+b) mod m

b) (a (b mod m)) mod m=(ab) mod m

c) (a mod m) mod m= a mod m

d) ((a mod m)+(b mod m)) mod m= (a+b) mod m

e) Si d/m⇒ (a mod m) mod d= a mod d

64
Generación de números aleatorios

11) Llamamos orden de a módulo m al menor λ∈Z+ que hace cierto a λ≡1modm. Se llama
orden de m (λ(m)) al máximo de los órdenes de los posibles a’s. Se dice que a es raíz
primitiva módulo m cuando su orden coincide con el orden de m.

12) Cálculo de λ(m):

a) Si m=Pe, con P primo impar ⇒ λ(m)=(P-1)Pe-1

b) λ(2)=1, λ(4)=2 y λ(2e)=2 e-2 ∀ e≥ 3

c) Si m = P1k1 ∗ P2k 2 ∗ L ∗ Prkr ⇒ λ (m) = mcm(λ (P1k1 ),L , λ ( Prkr ))

65

También podría gustarte