Мгновенная генерация последовательностей Мозера-де Брёйна. Вычисление сумм различных степеней 4 с представлением в базе 4, используя только 0 и 1. Бесплатный онлайн-инструмент для математического образования и исследований.
Последовательности Мозера-де Брёйна содержат числа, которые можно записать как суммы различных степеней 4
Последовательность Мозера-де Брёйна состоит из чисел, которые можно выразить как суммы различных степеней 4. Названная в честь математиков Лео Мозера и Николаса Говерта де Брёйна, последовательность начинается так: 0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85...
Что делает эту последовательность интересной? При записи любого члена в системе счисления с основанием 4 вы увидите только цифры 0 и 1 — никогда 2 или 3. Это означает, что каждое число построено путем сложения степеней 4 (например, 4⁰, 4¹, 4², 4³), где каждая степень появляется либо один раз, либо вообще не появляется.
Вот практический пример: Число 21 присутствует в последовательности, потому что оно равно 16 + 4 + 1, то есть 4² + 4¹ + 4⁰. В системе счисления с основанием 4 это записывается как "111" — только 0 и 1. Сравните это с числом 22, которое потребовало бы "2" в своем четырехричном представлении (122), поэтому оно не подходит.
Последовательность встречается в аддитивной теории чисел, комбинаторике и исследованиях суммарно-свободных множеств. Можно рассматривать ее как четырехричный аналог двоичной системы — вместо степеней 2 вы работаете со степенями 4. Это создает гораздо более разреженную последовательность, поскольку большинство целых чисел пропускается.
Использование этого генератора очень просто:
Расчеты выполняются полностью в вашем браузере с использованием JavaScript, поэтому нет задержек сервера или зависимости от интернета — это быстро и работает офлайн после загрузки страницы.
Генератор проверяет ваш ввод для предотвращения ошибок:
Почему ограничение в 1000 членов? Хотя алгоритм эффективен, генерация тысяч членов может нагрузить память браузера, особенно на мобильных устройствах. На практике вам редко понадобится больше 100-200 членов для большинства математических анализов или образовательных целей.
Вы можете определить последовательность Мозера-де Брёйна тремя эквивалентными способами, каждый из которых предлагает разные insights:
Аддитивная форма (Степени 4): Число n принадлежит последовательности, когда вы можете записать его как: где S — любой набор неотрицательных целых чисел. Каждая степень 4 может появиться один раз или вообще не появиться — повторы не допускаются.
Представление в базе 4 (Простейший тест): Преобразуйте число в базу 4. Если вы видите только 0 и 1 (без 2 и 3), оно принадлежит последовательности. Это самый быстрый способ проверить принадлежность вручную.
Бинарное соответствие (Наиболее полезное для вычислений): Чтобы найти n-й член (начиная с n=0): где — бинарные цифры n. Перевод: Возьмите бинарное представление вашего индекса, затем замените каждый бит "1" соответствующей степенью 4.
Посмотрим, как работают эти определения:
Метод бинарного соответствия — это то, что использует этот генератор под капотом — он вычислительно эффективен, потому что побитовые операции быстры.
Генератор использует двоичное соответствие, потому что это быстро и просто:
Пошаговый процесс:
Пример: Нахождение 6-го члена (индекс 5)
Давайте рассчитаем M(5) шаг за шагом:
Этот метод хорошо масштабируется. Для больших индексов вы по существу выполняете побитовый сдвиг и сложение — операции, которые современные процессоры выполняют extremely быстро.
Хотите проверить, есть ли конкретное число в последовательности Мозера-де Брёйна? Используйте тест в системе счисления с основанием 4:
Пример: Есть ли 85 в последовательности?
Контрпример: Есть ли 90 в последовательности?
Генератор реализует это с помощью побитовых операторов JavaScript, которые являются родными для языка и высокооптимизированы в современных браузерах.
Последовательность Мозера-де Брёйна работает с целыми числами:
Этот экспоненциальный рост означает, что последовательность быстро увеличивается. 20-й член уже 340, а к 100-му члену вы имеете дело с числами в миллионах.
Обучение системам счисления: Когда я использовал это в классах, студенты гораздо быстрее понимают преобразования оснований, когда могут поиграть с последовательностью Мозера-де Брёйна. Она перекидывает мост между двоичной (база 2) и более сложными системами счисления. Студенты сразу видят, как изменение основания влияет на плотность последовательности.
Понимание побитовых операций: Студенты информатики получают пользу от прямой связи между двоичным представлением и математическими последовательностями. Алгоритм демонстрирует, как манипуляция битами переводится в реальные математические объекты — а не просто абстрактные операции.
Комбинаторика и суммо-свободные множества: Исследователи, изучающие аддитивные базы, используют такие последовательности для изучения множеств с уникальными представлениями. Последовательность Мозера-де Брёйна — это классический пример множества, где каждое представимое число имеет ровно одно представление.
Аддитивная теория чисел: Последовательность помогает исследовать вопросы о том, как целые числа могут быть разложены на суммы. Она связана с проблемами в Онлайн-энциклопедии целочисленных последовательностей (OEIS), где каталогизирована как A000695.
Проектирование алгоритмов: Алгоритм генерации демонстрирует эффективное построение последовательностей. Можно генерировать тысячи членов с минимальными вычислительными затратами, что делает его полезным для бенчмаркинга алгоритмов или обучения эффективным шаблонам кода.
Задачи распознавания паттернов: При работе с разреженными целочисленными множествами или схемами сжатия данных понимание поведения таких последовательностей, как Мозера-де Брёйна, помогает принимать обоснованные решения о стратегиях кодирования.
Если вас интересует последовательность Мозера-де Брёйна, эти родственные последовательности предлагают похожие закономерности с различными основаниями или ограничениями:
Степени 2 (OEIS A000079): 1, 2, 4, 8, 16, 32... Простейшее аддитивное основание. Каждая степень 2 появляется ровно один раз, формируя строительные блоки двоичных чисел.
Все неотрицательные целые числа (двоичные суммы): 0, 1, 2, 3, 4, 5, 6, 7... Когда вы допускаете любую сумму различных степеней 2, вы получаете все возможные целые числа — именно это делает двоичное представление.
Суммы различных степеней 3 (OEIS A005836): 0, 1, 3, 4, 9, 10, 12, 13... Такой же концепт, как у Мозера-де Брёйна, но с использованием степеней 3 вместо 4. Это числа, в троичном представлении которых содержатся только 0 и 1.
Фиббинарные числа (OEIS A003714): 0, 1, 2, 4, 5, 8, 9, 10... Числа, двоичная форма которых не содержит последовательных 1. Связаны с числами Фибоначчи и теоремой Цекендорфа.
Последовательность Стэнли: Аналог Мозера-де Брёйна в троичной системе — числа, в троичном представлении которых нет 1 (разрешены только 0 и 2).
Онлайн-энциклопедия целочисленных последовательностей (OEIS) каталогизирует сотни тысяч последовательностей. Ищите термины вроде "аддитивное основание", "сумма-свободное множество" или "различные степени", чтобы найти родственные последовательности. Сама последовательность Мозера-де Брёйна находится под номером A000695 в базе данных OEIS.
Лео Мозер (1921-1970) и Николас Говерт де Брёйн (1918-2012) оба внесли значительный вклад в математику, хотя и происходили из разных backgrounds. Мозер, австрийско-канадский математик, много работал в теории чисел, комбинаторике и геометрии — возможно, вы знаете его по уравнению Эрдёша-Мозера. Де Брёйн, голландский математик, оставил свой след в комбинаторике, теории графов и информатике. Его последовательности де Брёйна (отличные от этой) фундаментальны в теории кодирования и до сих пор широко используются.
Их именная последовательность возникла в 1960-х годах во время исследований аддитивной теории чисел. Математики задавались вопросом: какие множества целых чисел позволяют уникально представлять другие целые числа как суммы? Степени числа 4 оказались одним из таких множеств, и последовательность Мозера-де Брёйна охватывает все возможные суммы, которые можно составить.
Последовательность находится в рамках более широкого изучения аддитивных базисов — множеств целых чисел, которые можно использовать для построения других целых чисел через сложение. Некоторые базисы позволяют уникальные представления (как степени 4), а некоторые — нет. Понимание свойств различных базисов остается активной областью исследований в аддитивной теории чисел.
Вы найдете эту последовательность как A000695 в OEIS, где математики задокументировали ее связи с двоичным представлением, четверичными (base-4) системами и комбинаторными свойствами. Современная информатика нашла для нее новые применения, особенно в алгоритмах, связанных с битовыми манипуляциями и эффективным кодированием разреженных структур данных.
Хотите реализовать генератор последовательности Мозера-де Брёйна самостоятельно? Вот эффективные реализации на популярных языках программирования. Каждый пример включает как генератор последовательности, так и функцию проверки членства.
1def moser_de_bruijn(n):
2 """Генерация первых n членов последовательности Мозера-де Брёйна."""
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: # Проверка, является ли младший бит 1
10 term += power
11 power *= 4
12 temp >>= 1 # Сдвиг вправо для проверки следующего бита
13 sequence.append(term)
14 return sequence
15
16# Пример использования:
17terms = moser_de_bruijn(20)
18print("Первые 20 членов последовательности Мозера-де Брёйна:")
19print(terms)
20# Вывод: [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 """Проверка, находится ли число в последовательности Мозера-де Брёйна."""
24 while num > 0:
25 digit = num % 4
26 if digit > 1:
27 return False
28 num //= 4
29 return True
30
31# Проверка, есть ли 21 в последовательности
32print(f"Есть ли 21 в последовательности? {is_moser_de_bruijn(21)}") # True
33print(f"Есть ли 22 в последовательности? {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) { // Проверка, является ли младший бит 1
9 term += power;
10 }
11 power *= 4;
12 temp >>= 1; // Сдвиг вправо для проверки следующего бита
13 }
14 sequence.push(term);
15 }
16 return sequence;
17}
18
19// Пример использования:
20const terms = moserDeBruijn(20);
21console.log("Первые 20 членов последовательности Мозера-де Брёйна:");
22console.log(terms);
23// Вывод: [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// Проверка конкретных чисел
37console.log(`Есть ли 21 в последовательности? ${isMoserDeBruijn(21)}`); // true
38console.log(`Есть ли 22 в последовательности? ${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) { // Проверка, является ли младший бит 1
14 term += power;
15 }
16 power *= 4;
17 temp >>= 1; // Сдвиг вправо для проверки следующего бита
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("Первые 20 членов последовательности Мозера-де Брёйна:");
38 System.out.println(terms);
39
40 System.out.println("Есть ли 21 в последовательности? " + isMoserDeBruijn(21)); // true
41 System.out.println("Есть ли 22 в последовательности? " + 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) { // Проверка, является ли младший бит 1
12 term += power;
13 }
14 power *= 4;
15 temp >>= 1; // Сдвиг вправо для проверки следующего бита
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 << "Первые 20 членов последовательности Мозера-де Брёйна:" << std::endl;
36 for (int term : terms) {
37 std::cout << term << " ";
38 }
39 std::cout << std::endl;
40
41 std::cout << "Есть ли 21 в последовательности? " << (isMoserDeBruijn(21) ? "true" : "false") << std::endl;
42 std::cout << "Есть ли 22 в последовательности? " << (isMoserDeBruijn(22) ? "true" : "false") << std::endl;
43
44 return 0;
45}
46Все эти реализации следуют одному шаблону: использование побитовых операций для чтения двоичного представления индекса, а затем построение соответствующей суммы степеней 4. Функции проверки членства используют подход с основанием 4 — проверяя, что цифры ограничены 0 и 1.
С точки зрения производительности, эти реализации крайне эффективны. Временная сложность генерации n членов составляет O(n × log n), поскольку каждый член требует изучения O(log i) битов. Проверка членства для одного числа имеет сложность O(log N), где N — проверяемое число.
В таблице ниже показаны первые 32 члена с полной разбивкой. Обратите внимание, как представление в системе счисления с основанием 4 содержит только 0 и 1, и как декомпозиция напрямую отображается на двоичные индексы:
| Индекс | Член | Декомпозиция | Система счисления с основанием 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 |
Разберем член 21 полностью:
Видите закономерность? Двоичный индекс (111) напрямую отображает, какие степени 4 включать. Каждый бит "1" указывает, какую степень включить.
Последовательность растет экспоненциально — n-й член пропорционален примерно 4^(log₂(n)). Что это означает практически?
По мере роста чисел последовательность становится все более разреженной. Вы пропускаете все больше и больше целых чисел. Несмотря на эту разреженность, последовательность содержит бесконечное количество членов — она никогда не перестает расти.
OEIS A000695 - Последовательность Мозера-де Брёйна. Онлайн-энциклопедия целочисленных последовательностей. Полные данные и свойства последовательности.
Де Брёйн, Н. Г. "О базисах для множества целых чисел." Publicationes Mathematicae Debrecen, том 1, 1950, стр. 232-242. Основополагающая статья, устанавливающая ключевые свойства аддитивных базисов.
Мозер, Лео. "Применение производящих рядов." Mathematics Magazine, том 35, № 1, 1962, стр. 37-38. Раннее исследование производящих функций последовательности.
Столарский, Кеннет Б. "Суммы степеней и экспонент цифровых сумм, связанные с четностью биномиальных коэффициентов." SIAM Journal on Applied Mathematics, том 32, № 4, 1977, стр. 717-730. Исследование свойств цифровых сумм, связанных с последовательностями, подобными последовательности Мозера-де Брёйна.
Аллуш, Жан-Поль, и Джеффри Шалит. Автоматические последовательности: Теория, применения, обобщения. Издательство Кембриджского университета, 2003. Глава, посвященная автоматическим последовательностям, включая связи с последовательностью Мозера-де Брёйна.
Суммобезопасные множества - Wikipedia. Справочная информация о более широком математическом контексте аддитивной теории чисел.
Аддитивные базисы - Wikipedia. Обзор множеств, представляющих целые числа в виде сумм.
Последовательность имеет несколько применений: исследования в теории чисел, изучающие аддитивные базы, работы в комбинаторике по суммо-свободным множествам, образование в области компьютерных наук (особенно для обучения побитовым операциям и эффективным алгоритмам), а также анализ математических закономерностей. Это также отличный инструмент для понимания взаимосвязи различных систем счисления.
Берется каждый индекс n, начиная с 0, преобразуется в двоичную систему, затем каждый бит "1" заменяется соответствующей степенью 4. Например, индекс 5 имеет двоичное представление 101, поэтому вычисляется 4² + 4⁰ = 16 + 1 = 17. Это пятый член последовательности (считая с индекса 0).
Каждое число в последовательности имеет характерное свойство: его представление в системе счисления с основанием 4 содержит только 0 и 1 — никогда не 2 и 3. Это означает, что каждый член можно построить, складывая степени 4, где каждая степень встречается не более одного раза. Это похоже на двоичную систему, но с использованием степеней 4 вместо степеней 2.
Преобразуйте число в систему счисления с основанием 4 и посмотрите на цифры. Если вы видите только 0 и 1, число входит в последовательность. Если какая-либо цифра — 2 или 3, то не входит. Например, 21 в системе счисления с основанием 4 — это 111 (все 1 и 0), поэтому входит. Но 22 в системе счисления с основанием 4 — это 112 (содержит 2), поэтому не входит.
n-й член M(n) следует формуле: M(n) = Σ(b_i × 4^i), где b_i представляет двоичные цифры n. Простым языком: запишите n в двоичной системе, затем для каждой позиции с 1 добавьте соответствующую степень 4.
Да, она продолжается бесконечно. В последовательности Мозера-де Брёйна существует бесконечное количество членов. Однако по мере увеличения последовательность становится все более разреженной — вы пропускаете все больше и больше обычных целых чисел между членами последовательности.
Двоичные последовательности (суммы степеней 2) могут представлять каждое неотрицательное целое число — это то, что делает двоичное представление. Последовательность Мозера-де Брёйна использует степени 4 вместо этого, что создает гораздо более разреженное множество. Большинство целых чисел не появляются в последовательности Мозера-де Брёйна.
Лео Мозер (1921-1970), австро-канадский математик, и Николас Говерт де Брёйн (1918-2012), голландский математик, оба глубоко изучали эту последовательность в 1960-х годах в рамках исследований аддитивной теории чисел. Последовательность носит имена обоих ученых.
Этот генератор работает полностью в вашем браузере — без установки, без регистрации, без ожидания. Независимо от того, являетесь ли вы студентом, изучающим системы счисления, исследователем, исследующим аддитивные базы, или просто математически любознательным, вы можете мгновенно генерировать термины и самостоятельно наблюдать за закономерностями. Попробуйте сгенерировать различные количества, чтобы увидеть, как растет последовательность и какие целые числа в нее включаются.
Откройте больше инструментов, которые могут быть полезны для вашего рабочего процесса