3 votos

¿Por qué esta secuencia genera todos los números en 2^n?

He aquí una secuencia fija $n \in \mathbb{N}$ :

$$ j_{i+1} = (5 j_i + 1) \pmod{ 2^n} $$

Esta regla de actualización puede simplificarse:

$$ j_{i} = \frac{5^i - 1}{4} \pmod{ 2^n}$$

Se puede verificar fácilmente lo anterior mediante prueba por inducción.

Ahora cuando empiezas con $j_1 = 1$ se acabarán generando todos los números del intervalo $[2, 2^i]$ y luego vuelve a 0 (en cuyo caso el término posterior vuelve a ser 1).

Escribí un rápido programa python para verificar esto:

ctr = 1
j = 1
exp = 20 # This is the n in 2^n
while j:
    j = ((5*j) + 1) % 2**exp
    ctr += 1

print("{} elements found.".format(ctr))

Y hasta exp = 25 esto funciona. Ejecutando lo anterior nos da 1048576 elements found .

Tengo un poco de conocimiento en teoría de grupos, y por lo que parece esto es similar a la intuición de grupos cíclicos. Sin embargo, no se me ocurre una explicación plausible de por qué esto es cierto. ¡Cualquier ayuda será muy apreciada!

EDITAR:

También quería comprobar que efectivamente no había duplicados, así que utilicé un hashset para comprobar hasta $2^{16}$ elementos.

ctr = 1
j = 1
exp = 16

seen = set([1])

while j:
    j = ((5*j) + 1) % 2**exp
    ctr += 1
    if j in seen:
        print("DUPLICATE FOUND")
    seen.add(j)

print("{} elements found.".format(ctr))

Y parece que tampoco había duplicados.

0voto

dartdog Puntos 1669

EDIT: Esta respuesta es incorrecta. Ver el comentario de KCd en la pregunta principal para una solución correcta.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X