Brombal pisze: 14 cze 2024, o 12:23 (...) ktoś wymyślił metodę faktoryzacji dla liczb gładkich
B-gładkich... Jak raz to wydaje mi się stosunkowo łatwe: gdy znamy wartość
B — to i wiemy, jak spowodować, że komputer będzie liczył w określonej ilości iteracji, a to ważna wiedza...
Albo komputer kwantowy.
Eeeh, marzenie! Wg. mnie, zamiast na ITER, Very-LHC czy kolejny HST (teleskop kosmiczny) — całą kasę należałoby włożyć w badania nad takim komputerem, i rozwój 𝑎𝑟𝑡𝑖𝑓𝑖𝑐𝑖𝑎𝑙 𝑖𝑛𝑡𝑒𝑙𝑙𝑖𝑔𝑒𝑛𝑐𝑒, przecież zmiast robić eksperymenty
w realu — łatwiej, taniej, i milion razy szybciej — da się to wyczaić w
symulacjach!. Teleskop Webba miał kosztować miliard $, a skosztowano go za sumę (bagatela!) DZIESIĘĆ razy większą, skandal!
Gdybyś miał dobry program do testu AKS to poproszę. Poszukuję od lat ale wszystko siermiężne.
Jeżeli "
wszystko siermiężne" to jest interes do zrobienia, wystarczy się nad problemem "
pochylić" — Luuudzie, pieniądze na ulicy leżą! Czyli: napisz dobry program, naprawdę
dobry, a potem zbieraj lajki na Facebooku, a na sprzedaży zbieraj na własną wysepkę na lewantyńskich wodach, hę?
Dodano po 27 minutach 58 sekundach:
Paragrafie — Twoje spostrzeżenie zmartwiło mnie, przyznam, poczułem nagle wielki zawód, bo myślałem, że znalazłem narzędzie uniwersalne, a wygląda na to, a raczej wyglądało (o tym za chwilę), że selekcja, jaką się prowadzi, przy niezbyt wysokim primoriale podstawowym, wprawdzie faktycznie eliminuje liczby złożone — ale wyłącznie z pewnego zakresu modulo, to znaczy liczby podzielne przez
niezbyt duże liczby pierwsze.
Skoro to zauważyłeś (zostawiając mojemu domysłowi detale, ale załapałem!), to nie będę sprawy tłumaczył Tobie, ale na użytek kogoś, kto nie dostrzega rzeczy, o której mówisz. Otóż:
1. W sposób oczywisty eliminowane są liczby podzielne przez dowolną z liczb pierwszych primorial tworzących, czyli dla liczby 11# będą to liczby
\(\displaystyle{ 2; 3; 5; 7; 11}\)
Ponadto będą eliminowane również i liczby złożone, podzielne przez wyższe liczby pierwsze, mianowicie z zakresu 11 —
\(\displaystyle{ 11}\)#, i chociaż ta ostatnia wartość jest już dosyć spora, to jedynie dla zwykłych zjadaczy chleba, a nie dla badaczy liczb pierwszych, dla których zabawa zaczyna się dopiero wtedy, gdy liczba ma znacznie ponad
\(\displaystyle{ 10k}\) cyfr
A tymczasem liczby
Double Precision oznaczają ich zapis w systemie dwójkowym na czterech bajtach, czyli na 64 bitach. 2 do potęgi 64 daje nam 19 cyfr dziesiętnych — co wytrawni łowcy naprawdę dużych liczb pierwszych — skwitują krótkim:
phi...
Niektóre implementacje Fortranu dopuszczały format liczb
\(\displaystyle{ REAL*16}\) czyli 128 bitów, co w systemie decymalnym daje 38 cyfr:
Phi!
(No cóż, wychowałem się w epoce
DOS-a łupanego... Zarzucę więc ten temat, bo się po prostu na tym nie znam)
Konsekwentnie omijając to, na czym się nie znam, powiem, że znalazłem pewne
umiarkowane lekarstwo, na wskazaną przez ciebie wadę. Przypomnę, że w tym pierwotnym tekście stwierdzałem
z buta, że należy konsekwentnie stosować coraz wyższe primoriale, tak, jak rośnie apetyt w miarę jedzenia. Ale przecież można je
po-sekwencjonować:
Wpierw jako podstawę algorytmu bierzemy primorial liczby p, i dokonujemy za jego pomocą wiadomych operacji. Jest pewna nadzieja na jakiś tam odsiew, ale nadzieja ta duża nie jest.
W następnym kroku, zamiast podnosić poprzeczkę primorialu, bierzemy liczbę wyższą od p, (oznaczmy ją q) — i stosujemy wzór następujący:
#\(\displaystyle{ qp}\) =
\(\displaystyle{ \frac{Q-hash}{P-hash} }\) dzieląc dwa primoriale (gdzie
\(\displaystyle{ q > p}\))
(zwracam uwagę, że znak # poprzedza DWIE liczby, na których on operuje. Nie jest to więc funkcja primorial, lecz funkcja nowa, nazwę ją prowizorycznie "
awangarda", ze względu właśnie na owo "
poprzedzanie")
Równanie to, tłumacząc na język potoczny oznacza, że nie wymnażamy liczb pierwszych od dwójki, aż do podstawy primorialu, lecz wymnażamy wyłącznie liczby pierwsze zaczynając od
\(\displaystyle{ p}\), zaś na
\(\displaystyle{ q}\) kończąc...
Oczywiście otrzymamy w wyniku liczbę
dużą, ale jej wielkość możemy
kontrolować, odpowiednio dobierając
\(\displaystyle{ Δpq }\) — czyli jak odległe, o ile większe od
\(\displaystyle{ p}\) ma być
\(\displaystyle{ q}\), a więc ile kolejnych liczb pierwszych, dosyć już dużych, będziemy przez siebie wymnażać, odrzucając
balast jakim była liczba równa
\(\displaystyle{ p}\)#
Następnie stosujemy znaną już procedurę dzielenia, oraz odrzucania tych liczb, które zostaną wskazane jako złożone.
W kolejnym kroku podnosimy sobie poprzeczkę, ale (i tu posłużę się pewnego rodzaju przenośnią) podnosimy też i
podłogę, z której będziemy poprzeczkę atakować, czyli bierzemy takie
\(\displaystyle{ r,}\) żeby nie było za duże, i wyliczamy sobie według znanego już wzoru:
#rq = r#/q#
Gdzie tym razem
\(\displaystyle{ Δ qr}\) dobierzemy
mniejszą, ponieważ mamy do czynienia z większymi liczbami.
No i tak implementując to w odpowiedniej
pętli, możemy spowodować, że program nie będzie musiał wykonywać zbyt dużych dzieleń, dzięki czemu będzie działał
szybciej.
Program będzie musiał mieć dostęp do bazy danych, zawierającej pełne zestawienie dużych liczb pierwszych z interesującego nas przedziału. Jak dużych? Ano zawierających się w przedziale od
\(\displaystyle{ q}\)# aż do
\(\displaystyle{ r}\)#
Zaś by to miało sens, abyśmy nie powielali błędów popełnionych przez innych — zestawienie tych
p-liczb musi być
kompletne, to znaczy muszą tam być WSZYSTKIE kolejne liczby pierwsze. Jakiekolwiek "
dziury" są niedopuszczalne, ponieważ spowodują, że i nasze obliczenia nie będą prawidłowe.
No, i to by było na tyle...
Dodano po 1 dniu 13 godzinach 12 minutach 5 sekundach:
Paragraf 22 pisze: 14 cze 2024, o 05:47 [1. ] żeby łatwo było zaimplementować
Nie wiem, czy mój pomysł, z użyciem funkcji 𝐕𝐚𝐧 — spełnia ten warunek, być może są sposoby prostsze, zerknij:
dyskusje-o-matematyce-f76/nowa-funkcja- ... 56965.html
[2. ] żeby dawały pewność, gdy "Tak - jest pierwsza"
—
Primorial sieve wraz z funkcją 𝐕𝐚𝐧 — jak najbardziej dają
pewność całkowitą...
Ale powinno być i proste, posuwamy się bowiem odmierzonym, zadanym krokiem, w butach
dokładnie \(\displaystyle{ 7}\)-milowych, od
\(\displaystyle{ p₀,}\) do
\(\displaystyle{ p₁}\), potem do
\(\displaystyle{ p₂}\), aż dotuptamy do
\(\displaystyle{ p_{n} }\), większego od liczby badanej, i to jest moment
STOP-u programu, jak wujcio
Turing zalecał...