o***@interia.pl
2013-03-03 08:42:08 UTC
Mam kolejne pytanie, a nie ma sensu robić off-topic'a w moich poprzednich tematach, więc zakładam nowy.
Jakie są najszybsze obecnie znane algorytmy poszukiwania zwykłych liczb pierwszych (nie będących żadnej szczególnej postaci)?
Czy istnieje coś szybszego niż trial division:
http://en.wikipedia.org/wiki/Trial_division
Przypatrzyłem się trochę funkcji:
f(x) = x/2 + d/2 - gdy x jest nieparzyste
f(x) = x/2 - gdy x jest parzyste
dla x startowego x=1, pod kątem badania w ogóle liczb pierwszych (nie tylko Mersenne'a) i wykazuje ona pewne właściwości. Po pierwsze czasy stopów (ilość iteracji po których funkcja, zaczynając od x=1 znów osiągnie x=1) dla różnych liczb pierwszych d nie powtarzają się oraz są zawsze mniejsze niż same testowane liczby, a dodatkowo liczby pierwsze d postaci:
- 2^k-1, mają w niej czas stopu = k (a także nie - pierwsze)
- 2^(2^k)+1, mają w niej czas stopu = 2^(k+1) (a także nie - pierwsze)
- zwykłe liczby pierwsze d, mają czasy stopów t, takie, że t dzieli d-1
Wydaje się, że żadna liczba złożona nie wykazuje ostatniej własności. Dlatego można by wykorzystać tę funkcje, do testowania liczb pod kątem pierwszości. Mianowicie, aby sprawdzić czy dana liczba d jest pierwsza wystarczyłoby sprawdzić czy jest ona wielokrotnością swojego czasu stopu, w powyższej funkcji. Co więcej sprawdzenie pierwszości liczby tą metodą nie wymaga znajomości żadnej z liczb pierwszych mniejszych niż jej pierwiastek, ani tym podobnych.
Czy gdyby algorytm okazał się poprawny miałby szanse konkurować ze współcześnie stosowanymi?
Na koniec zaznaczam, że powyższe przypuszczenia podaję, tylko jako (obserwacyjne) hipotezy, których co więcej, tym razem nie mam pojęcia jak udowodnić. Stąd też znaleziona w ten sposób liczba pierwsza wymagałaby weryfikacji klasyczną metodą.
Jakie są najszybsze obecnie znane algorytmy poszukiwania zwykłych liczb pierwszych (nie będących żadnej szczególnej postaci)?
Czy istnieje coś szybszego niż trial division:
http://en.wikipedia.org/wiki/Trial_division
Przypatrzyłem się trochę funkcji:
f(x) = x/2 + d/2 - gdy x jest nieparzyste
f(x) = x/2 - gdy x jest parzyste
dla x startowego x=1, pod kątem badania w ogóle liczb pierwszych (nie tylko Mersenne'a) i wykazuje ona pewne właściwości. Po pierwsze czasy stopów (ilość iteracji po których funkcja, zaczynając od x=1 znów osiągnie x=1) dla różnych liczb pierwszych d nie powtarzają się oraz są zawsze mniejsze niż same testowane liczby, a dodatkowo liczby pierwsze d postaci:
- 2^k-1, mają w niej czas stopu = k (a także nie - pierwsze)
- 2^(2^k)+1, mają w niej czas stopu = 2^(k+1) (a także nie - pierwsze)
- zwykłe liczby pierwsze d, mają czasy stopów t, takie, że t dzieli d-1
Wydaje się, że żadna liczba złożona nie wykazuje ostatniej własności. Dlatego można by wykorzystać tę funkcje, do testowania liczb pod kątem pierwszości. Mianowicie, aby sprawdzić czy dana liczba d jest pierwsza wystarczyłoby sprawdzić czy jest ona wielokrotnością swojego czasu stopu, w powyższej funkcji. Co więcej sprawdzenie pierwszości liczby tą metodą nie wymaga znajomości żadnej z liczb pierwszych mniejszych niż jej pierwiastek, ani tym podobnych.
Czy gdyby algorytm okazał się poprawny miałby szanse konkurować ze współcześnie stosowanymi?
Na koniec zaznaczam, że powyższe przypuszczenia podaję, tylko jako (obserwacyjne) hipotezy, których co więcej, tym razem nie mam pojęcia jak udowodnić. Stąd też znaleziona w ten sposób liczba pierwsza wymagałaby weryfikacji klasyczną metodą.