Está en la página 1de 3

PRNG – ALGORITMOS CLÁSICOS

NO CONGRUENCIALES

Método de Cuadrados medios

1. Definir semilla 𝑋0 con D número de digitos, donde D = 4


2. 𝑌0 = (𝑋0 )2
3. 𝑋1 = Los D dígitos del centro de 𝑌0
4. 𝑟1 = 0.D
5. 𝑌𝑖 = (𝑋𝑖 )2
6. 𝑋𝑖+1 = Los D dígitos del centro de 𝑌𝑖
7. 𝑟𝑖+1 = 0.D ∀ 𝑖 = 1,2,3,4, … , 𝑛

Método de multiplicador constante

1. Definir semilla 𝑋0 con D número de digitos, donde D = 4


2. Definir semilla 𝑎 con D número de digitos, donde D = 4
3. 𝑌0 = (𝑎 ∗ 𝑋0 )
4. 𝑋1 = Los D dígitos del centro de 𝑌0
5. 𝑟1 = 0.D
6. 𝑌𝑖 = (𝑎 ∗ 𝑋𝑖 )
7. 𝑋𝑖+1 = Los D dígitos del centro de 𝑌𝑖
8. 𝑟𝑖+1 = 0.D ∀ 𝑖 = 1,2,3,4, … , 𝑛

Método de productos medios

1. Definir semilla 𝑋0 con D número de digitos, donde D = 4


2. Definir semilla 𝑋1 con D número de digitos, donde D = 4
3. 𝑌0 = (𝑋0 ∗ 𝑋1 )
4. 𝑋2 = Los D dígitos del centro de 𝑌0
5. 𝑟1 = 0.D
6. 𝑌𝑖 = (𝑋𝑖 ∗ 𝑋𝑖+1 )
7. 𝑋𝑖+2 = Los D dígitos del centro de 𝑌𝑖
8. 𝑟𝑖+1 = 0.D ∀ 𝑖 = 1,2,3,4, … , 𝑛

CONGRUENCIALES

Algoritmo lineal

1. Definir semilla 𝑋0 , donde 𝑋0 > 0 y con valor entero


2. Definir constante multiplicativa 𝑎 , donde 𝑎 > 0 y con valor entero
3. Definir constante aditiva 𝑐 , donde 𝑐 > 0 y con valor entero
4. Definir valor de módulo 𝑚 , donde 𝑚 > 0 y con valor entero
5. 𝑋𝑖+1 = (𝑎 ∗ 𝑋𝑖 + 𝑐) 𝑚𝑜𝑑 (𝑚) ∀ 𝑖 = 1,2,3,4, … , 𝑛
𝑖𝑋
6. 𝑟𝑖 = 𝑚−1 ∀ 𝑖 = 1,2,3,4, … , 𝑛
Recomendaciones para algoritmo lineal:

𝑚 = 2𝑔
𝑎 =1+4∗𝑘
𝑘 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑒𝑛𝑡𝑒𝑟𝑜
𝑐 𝑟𝑒𝑙𝑎𝑡𝑖𝑣𝑎𝑚𝑒𝑛𝑡𝑒 𝑝𝑟𝑖𝑚𝑜 𝑑𝑒 𝑚
𝑔 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑒𝑛𝑡𝑒𝑟𝑜

Algoritmo multiplicativo

1. Definir semilla 𝑋0 , donde 𝑋0 > 0 y con valor entero


2. Definir constante multiplicativa 𝑎 , donde 𝑎 > 0 y con valor entero
3. Definir valor de módulo 𝑚 , donde 𝑚 > 0 y con valor entero
4. 𝑋𝑖+1 = (𝑎 ∗ 𝑋𝑖 ) 𝑚𝑜𝑑 (𝑚) ∀ 𝑖 = 1,2,3,4, … , 𝑛
𝑖𝑋
5. 𝑟𝑖 = 𝑚−1 ∀ 𝑖 = 1,2,3,4, … , 𝑛

Recomendaciones para algoritmo multiplicativo:

𝑚 = 2𝑔
𝑎 =3+8∗𝑘 𝑜 𝑎 = 5+8∗𝑘
𝑋0 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑢𝑛 𝑛ú𝑚𝑒𝑟𝑜 𝑖𝑚𝑝𝑎𝑟
𝑘 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑒𝑛𝑡𝑒𝑟𝑜
𝑔 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑒𝑛𝑡𝑒𝑟𝑜

Algoritmo cuadrático

1. Definir semilla 𝑋0 , donde 𝑋0 > 0 y con valor entero


2. Definir constante multiplicativa 𝑎 , donde 𝑎 > 0 y con valor entero
3. Definir constante multiplicativa 𝑏 , donde 𝑏 > 0 y con valor entero
4. Definir constante aditiva 𝑐 , donde 𝑐 > 0 y con valor entero
5. Definir valor de módulo 𝑚 , donde 𝑚 > 0 y con valor entero
6. 𝑋𝑖+1 = (𝑎 ∗ 𝑋𝑖 2 + 𝑏 ∗ 𝑋𝑖 + 𝑐) 𝑚𝑜𝑑 (𝑚) ∀ 𝑖 = 1,2,3,4, … , 𝑛
𝑖𝑋
7. 𝑟𝑖 = 𝑚−1 ∀ 𝑖 = 1,2,3,4, … , 𝑛

Recomendaciones para algoritmo cuadrático:

𝑚 = 2𝑔
𝑎 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑢𝑛 𝑛ú𝑚𝑒𝑟𝑜 𝑝𝑎𝑟
𝑐 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑢𝑛 𝑛ú𝑚𝑒𝑟𝑜 𝑖𝑚𝑝𝑎𝑟
𝑔 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑒𝑛𝑡𝑒𝑟𝑜
(𝑏 − 1) 𝑚𝑜𝑑 4 = 1

Algoritmo Fibonacci Rezagado

1. Definir semilla 𝑋0 , donde 𝑋0 > 0 y con valor entero


2. Definir semilla 𝑋1 , donde 𝑋1 > 0 y con valor entero
3. Definir valor de módulo 𝑚 , donde 𝑚 > 0 y con valor entero
4. 𝑋𝑖 = (𝑋𝑖−1 ∗ 𝑋𝑖−2 ) 𝑚𝑜𝑑 (𝑚) ∀ 𝑖 = 2,3,4,5,6, … , 𝑛
𝑖𝑋
5. 𝑟𝑖 = 𝑚−1 ∀ 𝑖 = 2,3,4, … , 𝑛

Recomendaciones para algoritmo Fibonacci Rezagado:

𝑚 = 2𝑔
𝑔 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑒𝑛𝑡𝑒𝑟𝑜

Algoritmo Blum, Blum y Shub

1. Definir semilla 𝑋0 , donde 𝑋0 > 0 y con valor entero


2. Definir valor de módulo 𝑚 , donde 𝑚 > 0 y con valor entero
3. 𝑋𝑖+1 = (𝑋𝑖 2 ) 𝑚𝑜𝑑 (𝑚) ∀ 𝑖 = 1,2,3,4, … , 𝑛
𝑋𝑖
4. 𝑟𝑖 = ∀ 𝑖 = 1,2,3,4, … , 𝑛
𝑚−1

Recomendaciones para algoritmo Blum, Blum y Shub

𝑚 = 2𝑔
𝑔 𝑑𝑒𝑏𝑒 𝑠𝑒𝑟 𝑒𝑛𝑡𝑒𝑟𝑜

Algoritmo Wichman Hill

1. Definir semilla 𝑋 , donde 0 < 𝑋 < 30000 y con valor entero


2. Definir semilla 𝑌 , donde 0 < 𝑌 < 30000 y con valor entero
3. Definir semilla 𝑍 , donde 0 < 𝑍 < 30000 y con valor entero
4. 𝑋 = (171 ∗ 𝑋) 𝑚𝑜𝑑 (30269)
5. 𝑌 = (172 ∗ 𝑌) 𝑚𝑜𝑑 (30307)
6. 𝑍 = (170 ∗ 𝑍) 𝑚𝑜𝑑 (30323)
𝑋 𝑌 𝑍 𝑋 𝑌 𝑍
7. 𝑟 = ((30269) + (30307) + (30323)) − (𝑖𝑛𝑡 ((30269) + (30307) + (30323)))

También podría gustarte