Skip to content

Spirale Ulama

Stanisław Ulam, przedstawiciel słynnej polskiej przedwojennej lwowskiej szkoły matematycznej, wybitny matematyk i naukowiec, w roku 1939 wyjechał do USA i pozostał tam na stałe. Był uczestnikiem Projektu Manhattan i współtwórcą pierwszej bomby atomowej. Tenże Ulam, jak głosi Wikipedia, w roku 1963 nudząc się na jakimś mało interesującym wykładzie, zaczął rysować na kartce kolejne liczby w formie spirali. Zapewne wyglądało to mniej więcej tak jak na grafice poniżej:

300px-Ulam-Spirale1
CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=143178

Wyróżniając na diagramie liczby pierwsze, już przy całkiem niedużych obszarach można zauważyć, że rozkład tych liczb nie jest zupełnie przypadkowy. Mianowicie liczby pierwsze, co oczywiste występują na przekątnych (poza 2 są liczbami nieparzystymi) ale co ciekawe, niektóre przekątne są zdecydowanie bardziej preferowane od pozostałych. Po raz kolejny w historii matematyki coś zasugerowało, że rozkład liczb pierwszych pośród pozostałych liczb może opisywać jakaś reguła.

CC BY-SA 3.0, https://commons.wikimedia.org/wiki/File:Ulam-Spirale2.png
CC BY-SA 3.0, https://commons.wikimedia.org/wiki/File:Ulam-Spirale2.png

Rysowanie diagramów aż się prosiło o zastosowanie komputerów, co też szybko uczyniono i w sieci można znaleźć wiele ciekawych wizualizacji diagramów. Ja wybrałem sobie to zadanie jako ciekawy temat do nauki Pythona. Liczby pierwsze łatwo i szybko wyznacza się jednym ze starszych algorytmów ludzkości, czyli za pomocą sita Erastotenesa.

Należy się tu krótka wzmianka o jego autorze. Erastotenes był grekiem, który w III w. p.n.e. żył w Aleksandrii i zarządzał tamtejszą biblioteką, która była zbiorem większości wiedzy naukowej jaką w tamtych czasach znała ludzkość. Poza algorytmem wyznaczania licz pierwszych jego autor znany jest między innymi z najstarszego, znanego współcześnie, trafnego oszacowania wielkości kuli ziemskiej. Szacowania wykonanego za pomocą reguł geometrii, kijka rzucającego cień i pomiaru odległości z Aleksandrii do Syene (około 800km) w krokach. Przy tak prostych środkach wyznaczył promień krzywizny powierzchni Ziemi i jej rozmiaru z błędem nie przekraczającym kilku procent. To jego zachowane dzieła, w których twierdził że można płynąc na zachód dotrzeć do Indii, po ponad 1600 latach pomogły zainspirować Kolumba do jego wyprawy.

Wracając do liczb pierwszych, do wizualizacji wyników wybrałem, sugerując się podpowiedziami wujka Google, bibliotekę matplotlib. Wynik mojego pierwszego skryptu poniżej, spirala Ulama w przestrzeni 601 na 601, czyli wszystkie liczby pierwsze od 2 do 361183.

Spirala Ulama w przestrzeni 601 na 601
Spirala Ulama w przestrzeni 601 na 601

Mało? To tak wygląda spirala o znacznie większym rozmiarze: Spirala licz pierwszych

W kolejnym podejściu postanowiłem zobaczyć jak to wygląda jeżeli nie będziemy zaczynać spirali od jedynki tylko od kolejnych liczb naturalnych. Między innymi powstała następująca animacja obrazująca wygląd spirali dla liczb początkowych od 1 do 1000.

I kolejny film, obszar 100 na 100, zaczynamy spiralę od 1 do 3000.
o

Skrypt Python 3.x do generowania animowanych spirali Ulama  można pobrać z repozytorium GitHub https://github.com/majchernet/animated-ulam-spiral-generator.

Równie ciekawy, jak nie ciekawszy efekt wizualizacji rozkładu liczb pierwszych, możemy uzyskać po użyciu współrzędnych radialnych. Spirale takie noszą imię Roberta Sacksa i wyglądają jak na przykładzie poniżej:

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *