Optimus Prime Numbers

W nawiązaniu do liczb pierwszych, którym poświęcony był wczorajszy wpis „Liczba π ukryta w liczbach pierwszych”, prezentuję postać z uniwersum Transfomers. Szanowni Czytelnicy – w cyklu „Matematyka w obrazkach”„Jego Królewska Mość”Optimus Prime – przywódca Autobotów 🙂

Optimus Prime Numbers

Pozdrowienia 🙂

Mariusz Gromada

Poza Liczbami: Inne Twórcze Przestrzenie

Matematyka i muzyka są ściśle powiązane przez rytm, harmonię i struktury

Matematyka i muzyka są ściśle powiązane przez rytm, harmonię i struktury, które wykorzystują matematyczne wzory i proporcje do tworzenia estetycznych i emocjonalnych doznań. Z nieśmiałą ekscytacją przedstawiam moją pierwszą poważniejszą kompozycję, w której starałem się uchwycić te połączenia.

I Am Here – RELEARN – Mariusz Gromada (2024)
I Am Here – RELEARN – Mariusz Gromada (2024)
Deep Under – RELEARN – Mariusz Gromada (2024)
Deep Under – RELEARN – Mariusz Gromada (2024)

Scalar – zaawansowana aplikacja mobilna z silnikiem matematycznym mojego autorstwa

Prime Pi

Liczba $\pi$ ukryta w liczbach pierwszych? Jak to możliwe? Przecież liczby pierwsze to „chaos”, a $\pi$ ma ścisły związek z najbardziej regularnym obiektem geometrycznym – tzn. z okręgiem / kołem.

Prime Pi

Czym jest $\pi$?

  • $\pi$ to stosunek obwodu koła do jego średnicy.
  • $\pi$ to pole powierzchni koła o promieniu $1$.
  • $\pi$ to połowa obwodu koła o promieniu $1$.
  • $\pi$ to $\frac{1}{4}$ pola powierzchni sfery o promieniu $1$.
  • $\pi$ to $\frac{3}{4}$ objętości kuli o promieniu $1$.
  • $k\pi$ dla całkowitych $k$ to miejsca zerowe funkcji $\sin x$.
  • … i wiele innych …

Czym są liczby pierwsze?

  • Liczba pierwsza to liczba naturalna $n\in\mathbb{N}$ większa od $1$, której jednymi dzielnikami są $1$ oraz $n$.
  • Liczby pierwsze to „atomy” w teorii liczb, tzn. każdą liczbę naturalną można rozłożyć na iloczyn liczb pierwszych.
  • Rozmieszczenie liczb pierwszych wśród liczb naturalnych spełnia pewne zależności statystyczne, jednak nie jest znany żaden precyzyjny wzór dla określenia $n-tej$ liczby pierwszej. Ciekawskich odsyłam do artykułu „Prime-counting function”.

Continue reading

W 1963 polski matematyk Stanisław Ulam uprzyjemniał sobie czas spędzany w trakcie „bardzo długiego i bardzo nudnego” wykładu. Rekreacja polegała na takim wypisywaniu kolejnych liczby naturalnych 1, 2, 3, …, aby finalny kształt utworzył „spiralę kwadratową” . Poniżej przykład dla pierwszych 49 liczba naturalnych, spirala oczywiście nie kończy się na 49, chodzi jedynie o zobrazowanie zasady.

Spirala Ulama

W kolejnym kroku na tak przygotowanej „tablicy” Ulam oznaczył wszystkie liczby pierwsze

Spirala Ulamanastępnie usuwając pozostałe.

Spirala UlamaW tym momencie jego oczom ukazał się niezwykle ciekawy i nieznany dotąd wzór – tendencja do układania się liczb pierwszych na „przekątnych / liniach diagonalnych”. Lepiej to obrazuje spirala wygenerowana dla znacznie większego zakresu liczb.

Spirala Ulama

Każdy z Was może wygenerować podobną spiralę używają np. tego generatora.

Spirala Ulama i parzystość / nieparzystość liczb

Nietrudno zauważyć, że na liniach diagonalnych leżą albo same liczby parzyste, albo same liczby nieparzyste. Liczby pierwsze, poza 2, są nieparzyste – zatem nic dziwnego, że układają się na przekątnych reprezentujących liczby nieparzyste. Zaskakujące jest natomiast to, że niektóre diagonale zawierają ich znacznie więcej niż inne.

Spirala Ulama i wielomiany kwadratowe

Badania nad spiralą Ulama pokazały, że wzory przez nią ujawnione mają związek z generację przez niektóre funkcje kwadratowe nienaturalnie dużej liczby liczb pierwszych (ang. prime-rich quadratic polynomials), tzn. dla niektórych $f(x)=ax^2+bx+c$ „nienaturalnie” często $f(n)$ jest liczbą pierwszą dla $n\in\mathbb{N}$. Diagonale mogą być reprezentowane przez wielomiany stopnia 2, co wyjaśniam na poniższym schemacie.

Spirala Ulama i wielomiany stopnia 2

Przeczytaj również:

Pozdrowienia,

Mariusz Gromada

Poza Liczbami: Inne Twórcze Przestrzenie

Matematyka i muzyka są ściśle powiązane przez rytm, harmonię i struktury

Matematyka i muzyka są ściśle powiązane przez rytm, harmonię i struktury, które wykorzystują matematyczne wzory i proporcje do tworzenia estetycznych i emocjonalnych doznań. Z nieśmiałą ekscytacją przedstawiam moją pierwszą poważniejszą kompozycję, w której starałem się uchwycić te połączenia.

I Am Here – RELEARN – Mariusz Gromada (2024)
I Am Here – RELEARN – Mariusz Gromada (2024)
Deep Under – RELEARN – Mariusz Gromada (2024)
Deep Under – RELEARN – Mariusz Gromada (2024)

Scalar – zaawansowana aplikacja mobilna z silnikiem matematycznym mojego autorstwa

Liczby pierwsze

Jednym z najprostszych testów pierwszości jest weryfikacja czy dana liczba $n$ posiada dzielnik z przedziału $(2, \sqrt{n})$ – takie podejście nazywane jest metodą naiwną – i niestety charakteryzuje się dużą złożonością obliczeniową. Nawet przy wykorzystaniu Sita Eratostenesa złożoność obliczeniowa sięga $\frac{\sqrt{n}}{\log{n}}$. Jednak w cyklu „Zabawy z rekurencją” nie bardzo zwracamy uwagę na złożoność 🙂 , bardziej chodzi o zobrazowanie jak całe algorytmy mogą być łatwo zapisane w postaci krótkich matematycznych funkcji rekurencyjnych – zatem do dzieła 🙂

Rekurencyjne poszukiwanie dzielników

Naszym zadaniem będzie zdefiniowanie funkcji zwracającej $1$ jeśli podana liczba $n$ jest liczbą pierwszą oraz $0$ w przeciwnym wypadku. Zacznijmy jednak od podania funkcji weryfikującej czy liczba posiada dzielniki.

$${\small\text{CzyDzielnik}(n, a, b)=}$$

$${\small=\begin{cases}0&\text{dla}\quad a>b\\1&\text{dla}\quad n \mod a=0\\ \text{CzyDzielnik}(n, a+1, b)&\text{w inn. przyp.}\end{cases}}$$

Powyższa funkcja zwraca $1$ jeśli liczba $n$ posiada dzielnik z przedziału $(a,b)$, oraz $0$ w przeciwnym wypadku. Następnie definiujemy wyrażenie reprezentujące naiwny test pierwszości.

$${\small\text{CzyPierwsza}(n)=}$$

$${\small=\begin{cases}0&\text{dla}\quad n<2\\ \neg\text{CzyDzielnik}(n,2,\sqrt{n})&\text{dla}\quad n>=2\end{cases}}$$

Rolą funkcji „CzyPierwsza” jest jedynie „wprawienie algorytmu w ruch” oraz zwrócenie negacji wyniki funkcji „CzyDzielnik”. Proste prawda? 🙂 Sprawdźmy więc w mXparser czy to faktycznie działa.

/* Definicja funkcji rekurencyjnych */
Function CzyDzielnik = new Function(&quot;CzyDzielnik(n, a, b) = if( a&amp;amp;gt;b, 0, if( n%a = 0, 1, CzyDzielnik(n, a+1, b) ) )&quot;);
Function CzyPierwsza = new Function(&quot;CzyPierwsza(n) = if( n&amp;amp;lt;2, 0, ~CzyDzielnik(n, 2, sqrt(n)) )&quot;, CzyDzielnik);

/* Obliczenie i wyświetlenie wartości */
mXparser.consolePrintln( &quot;CzyPierwsza(1) = &quot; + CzyPierwsza.calculate(1) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );
mXparser.consolePrintln( &quot;CzyPierwsza(2) = &quot; + CzyPierwsza.calculate(2) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );
mXparser.consolePrintln( &quot;CzyPierwsza(3) = &quot; + CzyPierwsza.calculate(3) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );
mXparser.consolePrintln( &quot;CzyPierwsza(4) = &quot; + CzyPierwsza.calculate(4) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );
mXparser.consolePrintln( &quot;CzyPierwsza(5) = &quot; + CzyPierwsza.calculate(5) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );
mXparser.consolePrintln( &quot;CzyPierwsza(6) = &quot; + CzyPierwsza.calculate(6) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );
mXparser.consolePrintln( &quot;CzyPierwsza(7) = &quot; + CzyPierwsza.calculate(7) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );
mXparser.consolePrintln( &quot;CzyPierwsza(8) = &quot; + CzyPierwsza.calculate(8) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );
mXparser.consolePrintln( &quot;CzyPierwsza(9) = &quot; + CzyPierwsza.calculate(9) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );
mXparser.consolePrintln( &quot;CzyPierwsza(10) = &quot; + CzyPierwsza.calculate(10) + &quot;, czas oblicz. = &quot; + CzyPierwsza.getComputingTime() + &quot; s.&quot; );

+ wynik

CzyPierwsza(1) = 0.0, czas oblicz. = 0.08 s.
CzyPierwsza(2) = 1.0, czas oblicz. = 0.03 s.
CzyPierwsza(3) = 1.0, czas oblicz. = 0.026 s.
CzyPierwsza(4) = 0.0, czas oblicz. = 0.022 s.
CzyPierwsza(5) = 1.0, czas oblicz. = 0.038 s.
CzyPierwsza(6) = 0.0, czas oblicz. = 0.015 s.
CzyPierwsza(7) = 1.0, czas oblicz. = 0.028 s.
CzyPierwsza(8) = 0.0, czas oblicz. = 0.015 s.
CzyPierwsza(9) = 0.0, czas oblicz. = 0.053 s.
CzyPierwsza(10) = 0.0, czas oblicz. = 0.011 s.

Wygląda na to, że obliczenia są poprawne! Teraz możemy zweryfikować ile jest liczb pierwszych w podanym przedziale, definiując

$$\pi(n)=\sum_{i=1}^n \text{CzyPierwsza}(i)$$

/* Definicja wyrażenia sumującego wynik funkcji CzyPierwsza */
Expression pi100 = new Expression(&quot;sum(i, 1, 100, CzyPierwsza(i) )&quot;);
pi100.addFunctions(CzyPierwsza);

/* Obliczenie i wyświetlenie wyniku */
mXparser.consolePrintln( &quot;Liczba liczb pierwszych w przedziale (1,100) = &quot; + pi100.calculate());

+ wynik

Liczba liczb pierwszych w przedziale (1,100) = 25.0

Pozdrowienia,

Mariusz Gromada

Pamiętajcie, że uruchamiając kody mXparsera należy dodać w nagłówku:

import org.mariuszgromada.math.mxparser.*;

Kod:

Zobacz również:

  1. Polowanie na czarownice – czyli zabawy z rekurencją (część 1)
  2. Prędkość ucieczki do nieskończoności – czyli zabawy z rekurencją (część 2)
  3. Rekurencja pośrednia – czyli zabawy z rekurencją (część 4)

Poza Liczbami: Inne Twórcze Przestrzenie

Matematyka i muzyka są ściśle powiązane przez rytm, harmonię i struktury

Matematyka i muzyka są ściśle powiązane przez rytm, harmonię i struktury, które wykorzystują matematyczne wzory i proporcje do tworzenia estetycznych i emocjonalnych doznań. Z nieśmiałą ekscytacją przedstawiam moją pierwszą poważniejszą kompozycję, w której starałem się uchwycić te połączenia.

I Am Here – RELEARN – Mariusz Gromada (2024)
I Am Here – RELEARN – Mariusz Gromada (2024)
Deep Under – RELEARN – Mariusz Gromada (2024)
Deep Under – RELEARN – Mariusz Gromada (2024)

Scalar – zaawansowana aplikacja mobilna z silnikiem matematycznym mojego autorstwa