Opracowałem uproszczony wzór na N-tą liczbę pierwszą, który działa dobrze dla bardzo dużych liczb, a który można łatwo zapamiętać i liczyć nawet na kalkulatorze albo w excelu, nie potrzeba żadnych specjalnych narzędzi ani super wysokiej precyzji obliczeń aby dostać dość dokładny wynik.

Zdjęcie

f(N) ≈ N*(ln(N) + ln(ln(N)) - 0,953)

Ponieważ wynik jest liczbą rzeczywistą to należy ją zaokrąglić do najbliższej liczby nieparzystej.

(np 4.1 zaokrąglamy do 5 a 7,9 zaokrąglamy do 7)

Jest spora szansa że trafimy w ten sposób właśnie na N-tą liczbę pierwszą, a jeśli nawet nie trafi się dokładnie to różnica jest minimalna.

(błąd nie przekracza 0,1 ‰ dla dużych liczb, a 0,1 ‰ to tyle co nic).

Gdyby ktoś potrzebował dokładniej to można wyznaczyć dokładniej tą stałą która we wzorze występuje, jednak ponieważ logarytm jest funkcją gładką a liczby pierwsze występują schodkowo to osiągniemy tylko to, że funkcja będzie przez te schody przechodzić ale się z nimi nie pokryje.

Jak podjazd dla wózka który może być dowolnie blisko stopni, ale nie położy się na nich jak dywanik bo musi być gładki aby wózek podjechał.

Dla wielu zastosowań takie przybliżenie wystarczy, wiedząc na jakiej wysokości jest podjazd nawet po ciemku da się wymacać stopą schodek który jest obok podjazdu.

Wzór jest przewidziany dla dużych liczb, małe 8-bitowe mnie nie obchodzą, małe to sobie można na piechotę wyznaczyć bez wzoru, ważniejsze jest to jak wzór się zachowuje dla liczb bliskich nieskończoności.

Jak to wygląda w praktyce dla średnich liczb (o numerach 16 bitowych)

257 liczba pierwsza to 1621 liczona ze wzoru to 1621.5948345

258 liczba pierwsza to 1627 liczona ze wzoru to 1629.0869823

259 liczba pierwsza to 1637 liczona ze wzoru to 1636.5835782

...

777 liczba pierwsza to 5903 liczona ze wzoru to 5903.5488504

...

2570 liczba pierwsza to 23029 liczona ze wzoru to 23025.622796

2571 liczba pierwsza to 23039 liczona ze wzoru to 23035.709760

2572 liczba pierwsza to 23041 liczona ze wzoru to 23045.797157

2573 liczba pierwsza to 23053 liczona ze wzoru to 23055.884985

...

60870 liczba pierwsza to 758617 liczona ze wzoru to 758616.08277

60871 liczba pierwsza to 758629 liczona ze wzoru to 758629.63644

60877 liczba pierwsza to 758711 liczona ze wzoru to 758710.95884

Skąd wziąłem ten wzór?

Jest takie oszacowanie na f(N) prawdziwe dla wszystkich N większych niż 6.

N*(ln(N) + ln(ln(N)) - 1) < f(N) < N*(ln(N) + ln(ln(N)) - 0)

To nie ja wymyśliłem, ja tylko dodałem „- 0” aby było lepiej widać, że po obu stronach jest prawie to samo, różnią się tylko tą jedną stałą.

Te nierówności podobno zostały udowodnione, choć dowodu nigdzie w internecie nie znalazłem (no ale zakładam, że dowód istnieje skoro poważni matematycy twierdzą, że go widzieli w papierowej wersji, prawdopodobnym autorem tego dowodu jest Pierre Dusart jakby ktoś chciał poszukać dowodu może będzie miał więcej szczęścia).

Skoro tak to musi istnieć jakaś stała L z przedziału (0,1) taka, że:

f(N) = N*(ln(N) + ln(ln(N)) - L)

Pozostaje tylko wyznaczyć liczbę L.

W pierwszej chwili myślałem że to będzie proste, wziąłem 20 milionów znanych mi liczb pierwszych (znaczy najpierw komputer mi je policzył tradycyjną metodą) i potem za pomocą bi-sekcji dobrałem taką stała aby dla tych liczb funkcja dawała dobry wynik, wyszło L=0,95487476

Fajnie że w jednej liczbie dało się zapisać 20 milionów innych liczb...

...ale rozumowanie w ten sposób nie do końca dało taki wynik o jaki mi chodziło, bardziej zależało mi na tym aby funkcja dawała dobry wynik dla bardzo dużych liczb, a przecież te wszystkie znane liczby pierwsze są małe w porównaniu z nieskończonością. Oszacowanie co się dzieje gdy N dąży do nieskończoności jest już znacznie trudniejsze, zwiększając N wykładniczo patrzyłem gdzie dąży różnica (błąd) między faktyczną liczbą pierwszą o takim numerze i liczbą pierwszą policzoną ze wzoru, wyszło mi że aby błąd w nieskończoności dążył do zera to L powinno być odrobinę mniejsze, coś w okolicy 0,953...

#matematyka

12

@borubar, co tu się na Lurku odpierdala ostatnio.

Mam nadzieję że to nie inspirowany AI obłęd umysłu 🥴
@borubar, wytłumacz laikowi, czym Twój wzór różni się od tego Thanosa tj pod względem mocy obliczeniowej, dokładności.

Czy ktoś już to wcześniej wymyślił? Bo mam wrażenie, podczas ostatnich 2 tyg, że na Lurku oprócz miłośników pejsów są najlepsi matematycy na świecie 😁
@Dps, mój jest wzór jest dokładniejszy i łatwiejszy do policzenia. Błędy się w nim nie kumulują, więc nawet gdy operacji matematycznych nie wykonuje się w nim precyzyjnie, to taki brak precyzji przy liczeniu ma mały wpływ na wynik.

Czy ktoś to wymyślił wcześniej?

Jeśli tak to się nie chwalił. No i to musiało by być niedawno, oszacowanie z którego korzystałem przy tworzeniu tego wzoru powstało dopiero 15 lat temu.
@borubar, w jaki sposób doszedłeś do tego? Co ma logarytm do liczb pierwszych? Skąd wziąłeś ten współczynnik -0.973? To jest ciekawe
@Dps, O związku między logarytmami a liczbami pierwszymi mówi twierdzenie „o rozmieszczeniu liczb pierwszych”, które zostało wymyślone przez Gaussa na podstawie obserwacji empirycznych, a później udowodnione pod koniec XIX wieku przez Hadamarda i Poussina. Twierdzenie to mówi, że liczba liczb pierwszych nie większych niż dana liczba rzeczywista n, oznaczana jako π(n), rośnie asymptotycznie jak ln(n)/n​

Ponieważ w Hipotezie Riemanna też występują logarytmy to przy próbie jego udowodnienia powstała cała masa innych twierdzeń i szacowań wykorzystujących logarytmy.

Jedno z tych oszacowań (nierówności które podałem) wydało mi się szczególnie ciekawe, bo wskazuje ono konkretny wąski przedział w którym znajduje się dana liczba pierwsza. W dodatku górę i dół tego ograniczenia opisuje niemal takie samo równanie - różnią się one tylko stałą.

A skoro tak to musi istnieć trzecie, podobne równanie które będzie wskazywać najbardziej prawdopodobną wartość liczby pierwszej - tylko trzeba dobrać odpowiednią stałą.

Najpierw chciałem ją obliczyć dopasowując wartość funkcji do jakiś znanych liczb pierwszych, ale gdy potem sprawdzałem dla innych większych liczb pierwszych to wychodziły drobne różnice, dlatego zmieniłem podejście skupiłem się nie na tym co jest na początku tego wykresu tylko na miejscu do którego on dąży

http://pl.wikipedia.org/wiki/Twierdzenie_o_liczbach_pierwszych#/media/Plik:Prime_number_theorem_ratio_convergence.svg

To też jest tylko wyznaczone numerycznie (w przybliżeniu), no ale okazuje się że nawet taka przybliżona wartość bardzo dobrze działa. To taj jak przy liczeniu pola koła przybliżenie 3,14 w większości przypadków jest wystarczająco dobre.
@borubar, dobra, zasiadam do Twojego posta

tak na marginesie, pisałem ostatnio na temat Symfonii Riemanna: nawet jeśli ten wzór nie zastąpi aktualnie używanych (mega skutecznych!) metod znajdywania liczb pierwszych, można go z powodzeniem użyć, aby stworzyć podejście hybrydowe! Czyli użyć go do ulepszenia ATK / MR — wzór nie zastąpi testów pierwszości, ale może je znacząco przyspieszyć przez:

- redukcję liczby kandydatów do testowania

- optymalizację parametrów testów

- inteligentne przewidywanie gdzie szukać

To jak GPS dla liczb pierwszych: nie jedzie za Ciebie, ale pokazuje najlepszą trasę!

Wpis został usunięty przez moderatora

@huop, dla dużych liczb jest to znacznie szybsze, masz wynik praktycznie natychmiast, policzenie tych trzech logarytmów nawet na ręcznym kalkulatorze trwa moment, a komputer policzy to w 3 cyklach procesora (czyli w miliardową część sekundy na procesorze który ma 3GHz). No i nie potrzeba trzymać gigabajtowych tablic w pamięci.

Gorsze w tym sensie, że to tylko przybliżenie, faktyczna liczba pierwsza może minimalnie różnić.

Ten szybki wzór można stosować wszędzie tam gdzie nie potrzeba super precyzji.
@borubar, WOW! kurde, nieźle! zaraz to wszystko przeczytam na spokojnie, ale czujesz, że coś jest na rzeczy, prawda? Symfonia Riemanna nie jest totalną ściemą: coś (?!) jest na rzeczy. Liczby pierwsze nie są do końca rozrzucone chaotycznie: Podążałem właśnie tym tropem...