Generați secvențe Moser-de Bruijn instant. Calculați sume de puteri distincte ale lui 4 cu reprezentări în baza 4 folosind doar 0 și 1. Instrument online gratuit pentru educație și cercetare matematică.
Secvențele Moser-de Bruijn conțin numere care pot fi scrise ca sume de puteri distincte de 4
Secvența Moser-de Bruijn constă în numere care pot fi exprimate ca sume de puteri distincte de 4. Numită după matematicienii Leo Moser și Nicolaas Govert de Bruijn, secvența începe astfel: 0, 1, 4, 5, 16, 17, 20, 21, 64, 65, 68, 69, 80, 81, 84, 85...
Ce face această secvență interesantă? Atunci când scrieți oricare termen în baza 4, veți vedea doar cifrele 0 și 1 - niciodată 2 sau 3. Acest lucru înseamnă că fiecare număr este construit prin adunarea puterilor de 4 (precum 4⁰, 4¹, 4², 4³), unde fiecare putere apare o dată sau deloc.
Iată un exemplu practic: Numărul 21 apare în secvență pentru că este egal cu 16 + 4 + 1, adică 4² + 4¹ + 4⁰. În baza 4, acesta se scrie ca "111" - doar 0 și 1. Comparați acest lucru cu 22, care ar necesita un "2" în reprezentarea sa în baza 4 (122), deci nu intră în secvență.
Secvența apare în teoria numerelor aditive, combinatorică și cercetări privind mulțimile fără sumă. Gândiți-o ca pe o rudă în baza 4 a sistemului binar - în loc de puteri de 2, lucrați cu puteri de 4. Acest lucru creează o secvență mult mai rară, deoarece cele mai multe numere întregi sunt omise.
Utilizarea acestui generator este simplă:
Calculele rulează complet în browser folosind JavaScript, astfel încât nu există întârzieri de server sau dependență de internet - este rapid și funcționează offline odată ce pagina se încarcă.
Generatorul validează intrarea pentru a preveni erorile:
De ce limita de 1000 de termeni? Deși algoritmul este eficient, generarea a mii de termeni poate solicita memoria browserului, mai ales pe dispozitivele mobile. În practică, veți avea rar nevoie de mai mult de 100-200 de termeni pentru cea mai mare parte a analizei matematice sau scopuri educaționale.
Puteți defini secvența Moser-de Bruijn în trei moduri echivalente, fiecare oferind perspective diferite:
Formă Aditivă (Puteri de 4): Un număr n aparține secvenței când îl puteți scrie ca: unde S este orice mulțime de numere întregi non-negative. Fiecare putere de 4 poate apărea o dată sau deloc - nu sunt permise repetări.
Reprezentare în Baza 4 (Test Simplu): Convertiți un număr în baza 4. Dacă vedeți doar 0 și 1 (fără 2 sau 3), este în secvență. Aceasta este cea mai rapidă metodă de verificare manuală a apartenenței.
Corespondență Binară (Cea Mai Utilă pentru Calcul): Pentru a găsi al n-lea termen (începând de la n=0): unde sunt cifrele binare ale lui n. Traducere: Luați reprezentarea binară a indicelui, apoi înlocuiți fiecare bit de "1" cu puterea corespunzătoare de 4.
Să vedem cum funcționează aceste definiții:
Metoda de corespondență binară este cea pe care acest generator o utilizează în spatele scenei - este eficientă din punct de vedere computațional deoarece operațiile pe biți sunt rapide.
Generatorul utilizează corespondența binară deoarece este rapidă și simplă:
Proces pas cu pas:
Exemplu detaliat: Găsirea celui de-al 6-lea termen (index 5)
Să calculăm M(5) pas cu pas:
Această metodă scalează bine. Pentru indici mari, ești practic în proces de deplasare și adăugare de biți - operații pe care procesoarele moderne le gestionează extrem de rapid.
Vrei să verifici dacă un anumit număr este în secvența Moser-de Bruijn? Folosește testul în baza 4:
Exemplu: Este 85 în secvență?
Contraexemplu: Este 90 în secvență?
Generatorul implementează acest lucru folosind operatorii pe biți JavaScript, care sunt nativi limbajului și foarte optimizați în browserele moderne.
Secvența Moser-de Bruijn tratează întregi puri:
Această creștere exponențială înseamnă că secvența devine mare rapid. Al 20-lea termen este deja 340, iar la al 100-lea termen te ocupi cu numere în milioane.
Predarea Sistemelor de Numere: Atunci când am folosit acest lucru în clase, elevii înțeleg conversiile de bază mult mai rapid când pot explora secvența Moser-de Bruijn. Aceasta face legătura între binar (baza 2) și sisteme numerice mai complexe. Elevii văd imediat cum schimbarea bazei modifică densitatea secvenței.
Înțelegerea Operațiilor pe Biți: Studenții la informatică beneficiază văzând legătura directă între reprezentarea binară și secvențele matematice. Algoritmul demonstrează cum manipularea biților se traduce în obiecte matematice reale—nu doar operații abstracte.
Combinatorică și Mulțimi Lipsite de Sume: Cercetătorii care studiază bazele aditive folosesc secvențe precum aceasta pentru a explora care mulțimi permit reprezentări unice. Secvența Moser-de Bruijn este un exemplu clasic de mulțime în care fiecare număr reprezentabil are exact o singură reprezentare.
Teoria Numerelor Aditive: Secvența ajută la investigarea modurilor în care întregi pot fi descompuși în sume. Este legată de probleme din Enciclopedia Online a Secvențelor de Întregi (OEIS), unde este catalogată ca A000695.
Proiectarea Algoritmilor: Algoritmul de generare demonstrează construcția eficientă a secvențelor. Poți genera mii de termeni cu un consum minim de resurse computaționale, ceea ce îl face util pentru benchmarking-ul algoritmilor sau predarea modelelor de cod eficiente.
Sarcini de Recunoaștere a Tiparelor: Atunci când lucrezi cu mulțimi de întregi dispersate sau scheme de comprimare a datelor, înțelegerea modului în care secvențe precum Moser-de Bruijn se comportă ajută la luarea deciziilor de proiectare privind strategiile de codare.
Dacă secvența Moser-de Bruijn vă interesează, aceste secvențe înrudite oferă tipare similare cu baze sau constrângeri diferite:
Puteri ale lui 2 (OEIS A000079): 1, 2, 4, 8, 16, 32... Baza aditivă cea mai simplă. Fiecare putere a lui 2 apare exact o dată, formând blocurile de construcție ale numerelor binare.
Toate Numerele Nenegative (Sume Binare): 0, 1, 2, 3, 4, 5, 6, 7... Atunci când permiteți orice sumă de puteri distincte ale lui 2, obțineți orice întreg posibil—asta face reprezentarea binară.
Sume de Puteri Distincte ale lui 3 (OEIS A005836): 0, 1, 3, 4, 9, 10, 12, 13... Același concept ca Moser-de Bruijn, dar folosind puteri ale lui 3 în loc de 4. Acestea sunt numere a căror reprezentare în baza 3 conține doar 0 și 1.
Numere Fibbinare (OEIS A003714): 0, 1, 2, 4, 5, 8, 9, 10... Numere a căror formă binară nu are 1 consecutive. Conectate la sistemele de numere Fibonacci și teorema lui Zeckendorf.
Secvența Stanley: Analogul în baza 3 al lui Moser-de Bruijn—numere fără 1 în reprezentarea lor în baza 3 (doar 0 și 2 sunt permise).
Enciclopedia Online a Secvențelor de Întregi (OEIS) cataloghează sute de mii de secvențe. Căutați termeni precum „bază aditivă", „mulțime fără sumă" sau „puteri distincte" pentru a găsi secvențe înrudite. Secvența Moser-de Bruijn însăși este A000695 în baza de date OEIS.
Leo Moser (1921-1970) și Nicolaas Govert de Bruijn (1918-2012) au adus contribuții durabile în matematică, deși proveneau din medii diferite. Moser, un matematician austro-canadian, a lucrat pe larg în teoria numerelor, combinatorică și geometrie - probabil îi cunoașteți numele de la ecuația Erdős–Moser. De Bruijn, un matematician olandez, și-a lăsat amprenta în combinatorică, teoria grafurilor și informatică. Secvențele sale de Bruijn (diferite de aceasta) sunt fundamentale în teoria codării și sunt încă pe larg utilizate astăzi.
Secvența lor a apărut în anii 1960 în cadrul investigațiilor din teoria numerelor aditive. Matematicienii se întrebau: care mulțimi de numere întregi permit reprezentarea unică a altor numere întregi ca sume? Puterile lui 4 s-au dovedit a fi una dintre aceste mulțimi, iar secvența Moser-de Bruijn captează toate sumele posibile pe care le poți forma.
Secvența se află în studiul mai larg al bazelor aditive - mulțimi de numere întregi care pot construi alte numere întregi prin adunare. Unele baze permit reprezentări unice (precum puterile lui 4), în timp ce altele nu. Înțelegerea proprietăților diferitelor baze rămâne o arie de cercetare activă în teoria numerelor aditive.
Veți găsi această secvență ca A000695 în OEIS, unde matematicienii au documentat conexiunile sale cu reprezentarea binară, sistemele cuaternare (baza-4) și proprietățile combinatoriale. Informatica modernă a găsit noi utilizări pentru ea, în special în algoritmi care implică manipularea biților și codarea eficientă a structurilor de date sparse.
Doriți să implementați generatorul de secvență Moser-de Bruijn? Iată implementări eficiente în limbaje de programare populare. Fiecare exemplu include atât un generator de secvență, cât și o funcție de testare a apartenenței.
1def moser_de_bruijn(n):
2 """Generează primele n termeni ai secvenței 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: # Verifică dacă bitul cel mai puțin semnificativ este 1
10 term += power
11 power *= 4
12 temp >>= 1 # Deplasare la dreapta pentru a verifica următorul bit
13 sequence.append(term)
14 return sequence
15
16# Exemplu de utilizare:
17terms = moser_de_bruijn(20)
18print("Primii 20 de termeni ai secvenței Moser-de Bruijn:")
19print(terms)
20# Ieșire: [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 """Verifică dacă un număr este în secvența 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# Verifică dacă 21 este în secvență
32print(f"Este 21 în secvență? {is_moser_de_bruijn(21)}") # Adevărat
33print(f"Este 22 în secvență? {is_moser_de_bruijn(22)}") # Fals
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) { // Verifică dacă bitul cel mai puțin semnificativ este 1
9 term += power;
10 }
11 power *= 4;
12 temp >>= 1; // Deplasare la dreapta pentru a verifica următorul bit
13 }
14 sequence.push(term);
15 }
16 return sequence;
17}
18
19// Exemplu de utilizare:
20const terms = moserDeBruijn(20);
21console.log("Primii 20 de termeni ai secvenței Moser-de Bruijn:");
22console.log(terms);
23// Ieșire: [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// Verifică numere specifice
37console.log(`Este 21 în secvență? ${isMoserDeBruijn(21)}`); // adevărat
38console.log(`Este 22 în secvență? ${isMoserDeBruijn(22)}`); // fals
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) { // Verifică dacă bitul cel mai puțin semnificativ este 1
14 term += power;
15 }
16 power *= 4;
17 temp >>= 1; // Deplasare la dreapta pentru a verifica următorul 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("Primii 20 de termeni ai secvenței Moser-de Bruijn:");
38 System.out.println(terms);
39
40 System.out.println("Este 21 în secvență? " + isMoserDeBruijn(21)); // adevărat
41 System.out.println("Este 22 în secvență? " + isMoserDeBruijn(22)); // fals
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) { // Verifică dacă bitul cel mai puțin semnificativ este 1
12 term += power;
13 }
14 power *= 4;
15 temp >>= 1; // Deplasare la dreapta pentru a verifica următorul 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 << "Primii 20 de termeni ai secvenței Moser-de Bruijn:" << std::endl;
36 for (int term : terms) {
37 std::cout << term << " ";
38 }
39 std::cout << std::endl;
40
41 std::cout << "Este 21 în secvență? " << (isMoserDeBruijn(21) ? "adevărat" : "fals") << std::endl;
42 std::cout << "Este 22 în secvență? " << (isMoserDeBruijn(22) ? "adevărat" : "fals") << std::endl;
43
44 return 0;
45}
46Toate aceste implementări urmează același model: utilizarea operațiilor pe biți pentru a citi reprezentarea binară a unui indice, apoi construirea sumei corespunzătoare a puterilor lui 4. Funcțiile de testare a apartenenței folosesc abordarea bazată pe baza 4 - verificând dacă cifrele sunt restricționate la 0 și 1.
Din punct de vedere al performanței, aceste implementări sunt extrem de eficiente. Complexitatea de timp este O(n × log n) pentru generarea a n termeni, deoarece fiecare termen necesită examinarea a O(log i) biți. Verificarea apartenenței pentru un singur număr este O(log N), unde N este numărul testat.
Tabelul de mai jos arată primii 32 de termeni cu defalcări complete. Observați cum reprezentarea în baza 4 conține doar 0 și 1, și cum decompunerea se mapează direct la indicii binari:
| Index | Termen | Decompunere | Baza-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 |
Să defalcăm complet termenul 21:
Vedeți tiparul? Indexul binar (111) se mapează direct la care puteri de 4 să fie incluse. Fiecare bit de "1" vă spune să includeți acea putere.
Secvența crește exponențial—al n-lea termen este aproximativ proporțional cu 4^(log₂(n)). Ce înseamnă asta practic?
Pe măsură ce numerele devin mai mari, secvența devine din ce în ce mai rară. Săriți din ce în ce mai mulți întregi. Cu toate acestea, secvența conține la nesfârșit termeni—nu se oprește niciodată din creștere.
OEIS A000695 - Secvența Moser-de Bruijn. Enciclopedia Online a Secvențelor de Întregi. Date cuprinzătoare și proprietăți ale secvenței.
De Bruijn, N. G. „Despre Bazele Mulțimii de Întregi." Publicationes Mathematicae Debrecen, vol. 1, 1950, pp. 232-242. Lucrarea fundamentală care stabilește proprietățile cheie ale bazelor aditive.
Moser, Leo. „O Aplicație a Seriilor Generatoare." Mathematics Magazine, vol. 35, nr. 1, 1962, pp. 37-38. Lucrare timpurie care explorează funcțiile generatoare ale secvenței.
Stolarsky, Kenneth B. „Sume de Puteri și Exponențiale ale Sumelor Digitale Legate de Paritatea Coeficienților Binomiali." SIAM Journal on Applied Mathematics, vol. 32, nr. 4, 1977, pp. 717-730. Explorează proprietățile sumelor digitale legate de secvențe precum Moser-de Bruijn.
Allouche, Jean-Paul, și Jeffrey Shallit. Secvențe Automate: Teorie, Aplicații, Generalizări. Cambridge University Press, 2003. Capitol care acoperă secvențele automate, inclusiv conexiunile cu secvența Moser-de Bruijn.
Mulțimi Lipsite de Sumă - Wikipedia. Context matematic mai larg al teoriei numerelor aditive.
Baze Aditive - Wikipedia. Prezentare generală a mulțimilor care pot reprezenta numere întregi ca sume.
Secvența are mai multe aplicații: cercetare în teoria numerelor care explorează bazele aditive, lucrări de combinatorică pe mulțimi fără sumă, educație în informatică (în special pentru predarea operațiilor pe biți și algoritmi eficienți), și analiză de modele matematice. Este, de asemenea, un instrument excelent de predare pentru înțelegerea modului în care diferite baze numerice se raportează una la alta.
Luați fiecare indice n începând de la 0, convertiți-l în binar, apoi înlocuiți fiecare bit de "1" cu puterea corespunzătoare a lui 4. De exemplu, indicele 5 are reprezentarea binară 101, deci calculați 4² + 4⁰ = 16 + 1 = 17. Acesta este al 5-lea termen (numărând de la indicele 0).
Fiecare număr din secvență are o proprietate distinctivă: reprezentarea sa în baza 4 conține doar 0 și 1 - niciodată 2 sau 3. Acest lucru înseamnă că puteți construi fiecare termen adăugând puteri ale lui 4 unde fiecare putere apare cel mult o dată. Este ca binar, dar folosind puteri ale lui 4 în loc de puteri ale lui 2.
Convertiți numărul în baza 4 și uitați-vă la cifre. Dacă vedeți doar 0 și 1, este în secvență. Dacă orice cifră este 2 sau 3, nu este. De exemplu, 21 în baza 4 este 111 (toate 1 și 0), deci este în secvență. Dar 22 în baza 4 este 112 (conține un 2), deci nu este.
Al n-lea termen M(n) urmează această formulă: M(n) = Σ(b_i × 4^i), unde b_i reprezintă cifrele binare ale lui n. În limbaj simplu: scrieți n în binar, apoi pentru fiecare poziție cu 1, adăugați puterea corespunzătoare a lui 4.
Da, merge la nesfârșit. Există infinit de mulți termeni în secvența Moser-de Bruijn. Cu toate acestea, pe măsură ce mergeți mai sus, secvența devine din ce în ce mai rară - săriți din ce în ce mai mulți întregi regulați între membrii secvenței.
Secvențele binare (sume de puteri ale lui 2) pot reprezenta orice întreg non-negativ - asta face reprezentarea binară. Secvența Moser-de Bruijn folosește puteri ale lui 4 în schimb, ceea ce creează o mulțime mult mai rară. Cele mai multe numere întregi nu apar în secvența Moser-de Bruijn.
Leo Moser (1921-1970), un matematician austro-canadian, și Nicolaas Govert de Bruijn (1918-2012), un matematician olandez, au studiat amândoi în profunzime această secvență în anii 1960 ca parte a cercetărilor în teoria numerelor aditive. Secvența poartă numele lor.
Acest generator rulează complet în browser-ul tău - fără instalare, fără înregistrare, fără așteptare. Indiferent dacă ești student care înveți despre sisteme numerice, un cercetător care explorează baze aditive sau pur și simplu curios din punct de vedere matematic, poți genera termeni instantaneu și observa singur tiparele. Încearcă să generezi cantități diferite pentru a vedea cum crește secvența și care numere întregi sunt incluse.
Descoperiți mai multe instrumente care ar putea fi utile pentru fluxul dvs. de lucru