Genere secuencias de Moser-de Bruijn al instante. Calcule sumas de potencias distintas de 4 con representaciones en base 4 utilizando solo 0 y 1. Herramienta en línea gratuita para educación e investigación matemática.
Las secuencias de Moser-de Bruijn contienen números que pueden escribirse como sumas de potencias distintas de 4
La secuencia de Moser-de Bruijn consiste en números que pueden expresarse como sumas de potencias distintas de 4. Nombrada en honor a los matemáticos Leo Moser y Nicolaas Govert de Bruijn, la secuencia comienza: 0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85...
¿Qué hace interesante a esta secuencia? Cuando escribes cualquier término en base 4, solo verás los dígitos 0 y 1, nunca 2 o 3. Esto significa que cada número se construye sumando potencias de 4 (como 4⁰, 4¹, 4², 4³), donde cada potencia aparece una vez o no aparece.
Aquí hay un ejemplo práctico: El número 21 aparece en la secuencia porque es igual a 16 + 4 + 1, que es 4² + 4¹ + 4⁰. En base 4, esto se escribe como "111", solo con 0s y 1s. Compara esto con 22, que necesitaría un "2" en su representación en base 4 (122), por lo que no cumple con los requisitos.
La secuencia aparece en teoría de números aditiva, combinatoria e investigación de conjuntos sin suma. Considérala como una prima en base 4 del sistema binario: en lugar de potencias de 2, estás trabajando con potencias de 4. Esto crea una secuencia mucho más dispersa, ya que se omiten la mayoría de los enteros.
Usar este generador es muy sencillo:
Los cálculos se ejecutan completamente en su navegador usando JavaScript, por lo que no hay demora del servidor ni dependencia de internet: es rápido y funciona sin conexión una vez que se carga la página.
El generador valida su entrada para prevenir errores:
¿Por qué el límite de 1000 términos? Aunque el algoritmo es eficiente, generar miles de términos puede sobrecargar la memoria del navegador, especialmente en dispositivos móviles. En la práctica, rara vez necesitará más de 100-200 términos para la mayoría de los análisis matemáticos o propósitos educativos.
Se puede definir la secuencia de Moser-de Bruijn de tres formas equivalentes, cada una ofreciendo diferentes perspectivas:
Forma Aditiva (Potencias de 4): Un número n pertenece a la secuencia cuando puedes escribirlo como: donde S es cualquier conjunto de enteros no negativos. Cada potencia de 4 puede aparecer una vez o no aparecer—no se permiten repeticiones.
Representación en Base-4 (Prueba Más Simple): Convierte un número a base 4. Si solo ves 0s y 1s (sin 2s o 3s), está en la secuencia. Esta es la forma más rápida de verificar la pertenencia a mano.
Correspondencia Binaria (Más Útil para Computar): Para encontrar el n-ésimo término (comenzando desde n=0): donde son los dígitos binarios de n. Traducción: Toma la representación binaria de tu índice, luego reemplaza cada bit "1" con la potencia de 4 correspondiente.
Veamos cómo funcionan estas definiciones:
El método de correspondencia binaria es lo que este generador usa internamente—es computacionalmente eficiente porque las operaciones a nivel de bits son rápidas.
El generador usa correspondencia binaria porque es rápido y directo:
Proceso Paso a Paso:
Ejemplo Detallado: Encontrando el 6º término (índice 5)
Calculemos M(5) paso a paso:
Este método escala bien. Para índices grandes, esencialmente estás haciendo desplazamiento de bits y suma—operaciones que los procesadores modernos manejan extremadamente rápido.
¿Quieres verificar si un número específico está en la secuencia de Moser-de Bruijn? Usa la prueba en base 4:
Ejemplo: ¿Está 85 en la secuencia?
Contraejemplo: ¿Está 90 en la secuencia?
El generador implementa esto usando operadores bit a bit de JavaScript, que son nativos del lenguaje y altamente optimizados en navegadores modernos.
La secuencia de Moser-de Bruijn trata con enteros puros:
Este crecimiento exponencial significa que la secuencia se vuelve grande rápidamente. El vigésimo término ya es 340, y para el término 100 estarás tratando con números en los millones.
Enseñanza de Sistemas Numéricos: Cuando he usado esto en aulas, los estudiantes comprenden las conversiones de base mucho más rápido cuando pueden jugar con la secuencia de Moser-de Bruijn. Establece un puente entre el sistema binario (base 2) y sistemas numerales más complejos. Los estudiantes ven inmediatamente cómo cambiar la base modifica la densidad de la secuencia.
Comprensión de Operaciones a Nivel de Bits: Los estudiantes de ciencias de la computación se benefician al ver la conexión directa entre la representación binaria y las secuencias matemáticas. El algoritmo demuestra cómo la manipulación de bits se traduce en objetos matemáticos reales, no solo en operaciones abstractas.
Combinatoria y Conjuntos Libres de Suma: Los investigadores que estudian bases aditivas utilizan secuencias como esta para explorar qué conjuntos permiten representaciones únicas. La secuencia de Moser-de Bruijn es un ejemplo clásico de un conjunto donde cada número representable tiene exactamente una representación.
Teoría de Números Aditivos: La secuencia ayuda a investigar cuestiones sobre cómo los enteros pueden descomponerse en sumas. Está relacionada con problemas en la Enciclopedia en Línea de Secuencias de Enteros (OEIS), donde está catalogada como A000695.
Diseño de Algoritmos: El algoritmo de generación muestra la construcción eficiente de secuencias. Se pueden generar miles de términos con una sobrecarga computacional mínima, lo que lo hace útil para la evaluación de algoritmos o para enseñar patrones de código eficientes.
Tareas de Reconocimiento de Patrones: Al trabajar con conjuntos de enteros dispersos o esquemas de compresión de datos, comprender cómo se comportan secuencias como la de Moser-de Bruijn ayuda a informar decisiones de diseño sobre estrategias de codificación.
Si la secuencia de Moser-de Bruijn le interesa, estas secuencias relacionadas ofrecen patrones similares con diferentes bases o restricciones:
Potencias de 2 (OEIS A000079): 1, 2, 4, 8, 16, 32... La base aditiva más simple. Cada potencia de 2 aparece exactamente una vez, formando los bloques de construcción de los números binarios.
Todos los Enteros No Negativos (Sumas Binarias): 0, 1, 2, 3, 4, 5, 6, 7... Cuando se permiten sumas de potencias de 2 distintas, se obtienen todos los enteros posibles, que es lo que hace la representación binaria.
Sumas de Potencias Distintas de 3 (OEIS A005836): 0, 1, 3, 4, 9, 10, 12, 13... El mismo concepto que Moser-de Bruijn, pero usando potencias de 3 en lugar de 4. Estos son números cuya representación en base 3 contiene solo 0s y 1s.
Números Fibinarios (OEIS A003714): 0, 1, 2, 4, 5, 8, 9, 10... Números cuya forma binaria no tiene 1s consecutivos. Conectados a sistemas de números de Fibonacci y el teorema de Zeckendorf.
Secuencia de Stanley: El análogo en base 3 de Moser-de Bruijn: números con ningún 1 en su representación en base 3 (solo se permiten 0s y 2s).
La Enciclopedia en Línea de Secuencias de Enteros (OEIS) cataloga cientos de miles de secuencias. Busque términos como "base aditiva", "conjunto sin suma" o "potencias distintas" para encontrar secuencias relacionadas. La secuencia de Moser-de Bruijn misma es A000695 en la base de datos OEIS.
Leo Moser (1921-1970) y Nicolaas Govert de Bruijn (1918-2012) ambos hicieron contribuciones duraderas a las matemáticas, aunque provenían de diferentes orígenes. Moser, un matemático austríaco-canadiense, trabajó extensamente en teoría de números, combinatoria y geometría—podrías reconocer su nombre por la ecuación de Erdős–Moser. De Bruijn, un matemático holandés, dejó su huella en combinatoria, teoría de grafos y ciencias de la computación. Sus secuencias de de Bruijn (diferentes a esta) son fundamentales en teoría de códigos y todavía se utilizan ampliamente hoy en día.
Su secuencia homónima surgió en la década de 1960 durante investigaciones en teoría de números aditivos. Los matemáticos se preguntaban: ¿qué conjuntos de enteros permiten representar únicamente otros enteros como sumas? Las potencias de 4 resultaron ser un conjunto tal, y la secuencia de Moser-de Bruijn captura todas las sumas posibles que se pueden hacer.
La secuencia se encuentra dentro del estudio más amplio de bases aditivas—conjuntos de enteros que pueden construir otros enteros mediante adición. Algunas bases permiten representaciones únicas (como las potencias de 4), mientras que otras no. Comprender qué bases tienen qué propiedades sigue siendo un área de investigación activa en teoría de números aditivos.
Encontrarás esta secuencia como A000695 en OEIS, donde los matemáticos han documentado sus conexiones con representación binaria, sistemas cuaternarios (base-4) y propiedades combinatorias. La informática moderna ha encontrado nuevos usos para ella, particularmente en algoritmos que involucran manipulación de bits y codificación eficiente de estructuras de datos dispersas.
¿Quieres implementar el generador de secuencia de Moser-de Bruijn tú mismo? Aquí hay implementaciones eficientes en lenguajes de programación populares. Cada ejemplo incluye un generador de secuencia y una función de prueba de pertenencia.
1def moser_de_bruijn(n):
2 """Generar los primeros n términos de la secuencia de Moser-de Bruijn."""
3 sequence = []
4 for i in range(n):
5 term = 0
6 power = 1
7 temp = i
8 while temp > 0:
9 if temp & 1: # Comprobar si el bit menos significativo es 1
10 term += power
11 power *= 4
12 temp >>= 1 # Desplazamiento a la derecha para comprobar el siguiente bit
13 sequence.append(term)
14 return sequence
15
16# Ejemplo de uso:
17terms = moser_de_bruijn(20)
18print("Primeros 20 términos de la secuencia de Moser-de Bruijn:")
19print(terms)
20# Salida: [0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85, 256, 257, 260, 261]
21
22def is_moser_de_bruijn(num):
23 """Comprobar si un número está en la secuencia de Moser-de Bruijn."""
24 while num > 0:
25 digit = num % 4
26 if digit > 1:
27 return False
28 num //= 4
29 return True
30
31# Comprobar si 21 está en la secuencia
32print(f"¿Está 21 en la secuencia? {is_moser_de_bruijn(21)}") # True
33print(f"¿Está 22 en la secuencia? {is_moser_de_bruijn(22)}") # False
341function moserDeBruijn(n) {
2 const sequence = [];
3 for (let i = 0; i < n; i++) {
4 let term = 0;
5 let power = 1;
6 let temp = i;
7 while (temp > 0) {
8 if (temp & 1) { // Comprobar si el bit menos significativo es 1
9 term += power;
10 }
11 power *= 4;
12 temp >>= 1; // Desplazamiento a la derecha para comprobar el siguiente bit
13 }
14 sequence.push(term);
15 }
16 return sequence;
17}
18
19// Ejemplo de uso:
20const terms = moserDeBruijn(20);
21console.log("Primeros 20 términos de la secuencia de Moser-de Bruijn:");
22console.log(terms);
23// Salida: [0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85, 256, 257, 260, 261]
24
25function isMoserDeBruijn(num) {
26 while (num > 0) {
27 const digit = num % 4;
28 if (digit > 1) {
29 return false;
30 }
31 num = Math.floor(num / 4);
32 }
33 return true;
34}
35
36// Comprobar números específicos
37console.log(`¿Está 21 en la secuencia? ${isMoserDeBruijn(21)}`); // true
38console.log(`¿Está 22 en la secuencia? ${isMoserDeBruijn(22)}`); // false
391import java.util.ArrayList;
2import java.util.List;
3
4public class MoserDeBruijnGenerator {
5
6 public static List<Integer> generateSequence(int n) {
7 List<Integer> sequence = new ArrayList<>();
8 for (int i = 0; i < n; i++) {
9 int term = 0;
10 int power = 1;
11 int temp = i;
12 while (temp > 0) {
13 if ((temp & 1) == 1) { // Comprobar si el bit menos significativo es 1
14 term += power;
15 }
16 power *= 4;
17 temp >>= 1; // Desplazamiento a la derecha para comprobar el siguiente bit
18 }
19 sequence.add(term);
20 }
21 return sequence;
22 }
23
24 public static boolean isMoserDeBruijn(int num) {
25 while (num > 0) {
26 int digit = num % 4;
27 if (digit > 1) {
28 return false;
29 }
30 num /= 4;
31 }
32 return true;
33 }
34
35 public static void main(String[] args) {
36 List<Integer> terms = generateSequence(20);
37 System.out.println("Primeros 20 términos de la secuencia de Moser-de Bruijn:");
38 System.out.println(terms);
39
40 System.out.println("¿Está 21 en la secuencia? " + isMoserDeBruijn(21)); // true
41 System.out.println("¿Está 22 en la secuencia? " + isMoserDeBruijn(22)); // false
42 }
43}
441#include <iostream>
2#include <vector>
3
4std::vector<int> moserDeBruijn(int n) {
5 std::vector<int> sequence;
6 for (int i = 0; i < n; i++) {
7 int term = 0;
8 int power = 1;
9 int temp = i;
10 while (temp > 0) {
11 if (temp & 1) { // Comprobar si el bit menos significativo es 1
12 term += power;
13 }
14 power *= 4;
15 temp >>= 1; // Desplazamiento a la derecha para comprobar el siguiente bit
16 }
17 sequence.push_back(term);
18 }
19 return sequence;
20}
21
22bool isMoserDeBruijn(int num) {
23 while (num > 0) {
24 int digit = num % 4;
25 if (digit > 1) {
26 return false;
27 }
28 num /= 4;
29 }
30 return true;
31}
32
33int main() {
34 std::vector<int> terms = moserDeBruijn(20);
35 std::cout << "Primeros 20 términos de la secuencia de Moser-de Bruijn:" << std::endl;
36 for (int term : terms) {
37 std::cout << term << " ";
38 }
39 std::cout << std::endl;
40
41 std::cout << "¿Está 21 en la secuencia? " << (isMoserDeBruijn(21) ? "true" : "false") << std::endl;
42 std::cout << "¿Está 22 en la secuencia? " << (isMoserDeBruijn(22) ? "true" : "false") << std::endl;
43
44 return 0;
45}
46Todas estas implementaciones siguen el mismo patrón: usar operaciones de bits para leer la representación binaria de un índice, y luego construir la suma correspondiente de potencias de 4. Las funciones de prueba de pertenencia utilizan el enfoque base-4, comprobando si los dígitos están restringidos a 0 y 1.
En cuanto al rendimiento, estas implementaciones son altamente eficientes. La complejidad temporal es O(n × log n) para generar n términos, ya que cada término requiere examinar O(log i) bits. Comprobar la pertenencia de un solo número es O(log N), donde N es el número que se está probando.
La tabla siguiente muestra los primeros 32 términos con desgloses completos. Observe cómo la representación en base 4 contiene solo 0s y 1s, y cómo la descomposición se asigna directamente a índices binarios:
| Índice | Término | Descomposición | Base-4 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 4⁰ | 1 |
| 2 | 4 | 4¹ | 10 |
| 3 | 5 | 4¹ + 4⁰ | 11 |
| 4 | 16 | 4² | 100 |
| 5 | 17 | 4² + 4⁰ | 101 |
| 6 | 20 | 4² + 4¹ | 110 |
| 7 | 21 | 4² + 4¹ + 4⁰ | 111 |
| 8 | 64 | 4³ | 1000 |
| 9 | 65 | 4³ + 4⁰ | 1001 |
| 10 | 68 | 4³ + 4¹ | 1010 |
| 11 | 69 | 4³ + 4¹ + 4⁰ | 1011 |
| 12 | 80 | 4³ + 4² | 1100 |
| 13 | 81 | 4³ + 4² + 4⁰ | 1101 |
| 14 | 84 | 4³ + 4² + 4¹ | 1110 |
| 15 | 85 | 4³ + 4² + 4¹ + 4⁰ | 1111 |
| 16 | 256 | 4⁴ | 10000 |
| 17 | 257 | 4⁴ + 4⁰ | 10001 |
| 18 | 260 | 4⁴ + 4¹ | 10010 |
| 19 | 261 | 4⁴ + 4¹ + 4⁰ | 10011 |
| 20 | 272 | 4⁴ + 4² | 10100 |
| 21 | 273 | 4⁴ + 4² + 4⁰ | 10101 |
| 22 | 276 | 4⁴ + 4² + 4¹ | 10110 |
| 23 | 277 | 4⁴ + 4² + 4¹ + 4⁰ | 10111 |
| 24 | 320 | 4⁴ + 4³ | 11000 |
| 25 | 321 | 4⁴ + 4³ + 4⁰ | 11001 |
| 26 | 324 | 4⁴ + 4³ + 4¹ | 11010 |
| 27 | 325 | 4⁴ + 4³ + 4¹ + 4⁰ | 11011 |
| 28 | 336 | 4⁴ + 4³ + 4² | 11100 |
| 29 | 337 | 4⁴ + 4³ + 4² + 4⁰ | 11101 |
| 30 | 340 | 4⁴ + 4³ + 4² + 4¹ | 11110 |
| 31 | 341 | 4⁴ + 4³ + 4² + 4¹ + 4⁰ | 11111 |
Analicemos completamente el término 21:
¿Ve el patrón? El índice binario (111) se asigna directamente a qué potencias de 4 incluir. Cada bit "1" le indica incluir esa potencia.
La secuencia crece exponencialmente—el término n-ésimo es aproximadamente proporcional a 4^(log₂(n)). ¿Qué significa esto en la práctica?
A medida que los números se vuelven más grandes, la secuencia se vuelve cada vez más dispersa. Se saltan más y más enteros. A pesar de esta dispersión, la secuencia contiene infinitos términos—nunca deja de crecer.
OEIS A000695 - Secuencia de Moser-de Bruijn. La Enciclopedia en Línea de Secuencias de Enteros. Datos completos y propiedades de la secuencia.
De Bruijn, N. G. "Sobre Bases para el Conjunto de Enteros." Publicationes Mathematicae Debrecen, vol. 1, 1950, pp. 232-242. El documento fundamental que establece propiedades clave de bases aditivas.
Moser, Leo. "Una Aplicación de Series Generatrices." Mathematics Magazine, vol. 35, no. 1, 1962, pp. 37-38. Trabajo temprano que explora las funciones generatrices de la secuencia.
Stolarsky, Kenneth B. "Sumas de Potencias y Exponenciales de Sumas Digitales Relacionadas con la Paridad de Coeficientes Binomiales." SIAM Journal on Applied Mathematics, vol. 32, no. 4, 1977, pp. 717-730. Explora propiedades de sumas digitales relacionadas con secuencias como Moser-de Bruijn.
Allouche, Jean-Paul, y Jeffrey Shallit. Secuencias Automáticas: Teoría, Aplicaciones, Generalizaciones. Cambridge University Press, 2003. Capítulo que cubre secuencias automáticas, incluyendo conexiones con la secuencia de Moser-de Bruijn.
Conjuntos Sin Suma - Wikipedia. Antecedentes sobre el contexto matemático más amplio de la teoría de números aditivos.
Bases Aditivas - Wikipedia. Descripción general de conjuntos que pueden representar enteros como sumas.
La secuencia tiene varias aplicaciones: investigación en teoría de números explorando bases aditivas, trabajo en combinatoria sobre conjuntos sin suma, educación en ciencias de la computación (particularmente para enseñar operaciones de bits y algoritmos eficientes), y análisis de patrones matemáticos. También es una excelente herramienta didáctica para comprender cómo se relacionan diferentes bases numéricas entre sí.
Tome cada índice n comenzando desde 0, conviértalo a binario, luego reemplace cada bit "1" con la potencia de 4 correspondiente. Por ejemplo, el índice 5 tiene representación binaria 101, así que calcula 4² + 4⁰ = 16 + 1 = 17. Ese es el quinto término (contando desde el índice 0).
Cada número en la secuencia tiene una propiedad distintiva: su representación en base 4 contiene solo 0s y 1s, nunca 2s o 3s. Esto significa que puede construir cada término sumando potencias de 4 donde cada potencia aparece como máximo una vez. Es como el sistema binario, pero usando potencias de 4 en lugar de potencias de 2.
Convierta su número a base 4 y observe los dígitos. Si ve solo 0s y 1s, está en la secuencia. Si algún dígito es 2 o 3, no lo está. Por ejemplo, 21 en base 4 es 111 (todos 1s y 0s), así que está incluido. Pero 22 en base 4 es 112 (contiene un 2), así que no lo está.
El término n-ésimo M(n) sigue esta fórmula: M(n) = Σ(b_i × 4^i), donde b_i representa los dígitos binarios de n. En lenguaje llano: escriba n en binario, y para cada posición con un 1, sume la potencia de 4 correspondiente.
Sí, continúa indefinidamente. Hay infinitos términos en la secuencia de Moser-de Bruijn. Sin embargo, a medida que avanza, la secuencia se vuelve cada vez más dispersa: se saltan más y más enteros regulares entre los miembros de la secuencia.
Las secuencias binarias (sumas de potencias de 2) pueden representar todos los enteros no negativos, eso es lo que hace la representación binaria. La secuencia de Moser-de Bruijn usa potencias de 4 en su lugar, lo que crea un conjunto mucho más disperso. La mayoría de los enteros no aparecen en la secuencia de Moser-de Bruijn.
Leo Moser (1921-1970), un matemático austríaco-canadiense, y Nicolaas Govert de Bruijn (1918-2012), un matemático holandés, estudiaron esta secuencia en profundidad durante la década de 1960 como parte de una investigación en teoría de números aditivos. La secuencia lleva el nombre de ambos.
Este generador funciona completamente en su navegador, sin instalación, sin registro, sin espera. Ya sea que sea un estudiante aprendiendo sobre sistemas numéricos, un investigador explorando bases aditivas, o simplemente alguien matemáticamente curioso, puede generar términos al instante y ver los patrones usted mismo. Pruebe a generar diferentes cantidades para observar cómo crece la secuencia y qué enteros se incluyen.
Descubre más herramientas que podrían ser útiles para tu flujo de trabajo