Powyżej na /math/33094/deleting-any-digit-yields-a-prime-is-there-a-name-for-to zadaje się następujące pytanie. Ile jest liczb pierwszych, które pozostają pierwsze po usunięciu jednej z jej cyfr? Na przykład 719
jest taka pierwsza, jak masz 71
, 19
i 79
. Chociaż to pytanie pozostaje nierozwiązane, pomyślałem, że będzie to miłe wyzwanie w kodowaniu.
Zadanie. Podaj największą liczbę pierwszą, jaką możesz znaleźć, która pozostaje liczbą pierwszą po usunięciu którejkolwiek z jej cyfr. Powinieneś także podać kod, który go znajdzie.
Wynik. Wartość liczby pierwszej, którą dajesz.
Możesz używać dowolnego języka programowania i bibliotek, pod warunkiem, że są one bezpłatne.
Na początek 99444901133
jest to największa podana na połączonej stronie.
Limit czasu. Przyjmę największą poprawną odpowiedź podaną dokładnie tydzień po pierwszej poprawnej odpowiedzi, większą niż 99444901133
podana w odpowiedzi.
Dotychczasowe wyniki.
Python (primo)
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
J (randomra) (Ta odpowiedź uruchomiła programator tygodniowy 21 lutego 2013 r.)
222223333333
9901444133
(usunięcie jednej 9) nie jest liczbą pierwszą (7 x 1414492019
). Twój poprzedni przykład był jednak poprawny.Odpowiedzi:
274 cyfry
Znalezienie zajęło około 20 godzin czasu procesora i około 2 minut na liczbę pierwszą. Natomiast 84-cyfrowe rozwiązanie można znaleźć w około 3 minuty.
84 cyfry
77777777999999999999999777777777 (32 cyfr)
66666666666666622222222222222333 (32 cyfr)
647777777777777777777777777 (27 cyfr)
44444441333333333333 (20 cyfr)
999996677777777777 (18 cyfr)
167777777777777 (15) cyfry
Polecam to narzędzie, jeśli chcesz potwierdzić pierwotność: aplet ECM D. Alpern
Również stosując podejście repdigit, które wydaje się być podejściem, które najprawdopodobniej znajdzie duże wartości. Poniższy skrypt algorytm pomija większość numerów lub obcięcia, które prowadzą do wielokrotności 2, 3, 5 i obecnie 11 c / o PeterTaylor (jego wkład wzrost wydajności o około 50%).
my_math.py
można znaleźć tutaj: http://codepad.org/KtXsydxKAlternatywnie możesz również użyć
gmpy.is_prime
funkcji: Projekt GMPYNiektóre niewielkie ulepszenia prędkości wynikające z profilowania. Kontrola pierwotności najdłuższego z czterech kandydatów została przeniesiona na koniec,
xrange
zastępujerange
ilong
zastępujeint
rzutowania typu.int
wydaje się mieć niepotrzebny narzut, jeśli ocenione wyrażenie daje w wynikulong
.Zasady podzielności
Niech N będzie dodatnią liczbą całkowitą w postaci a ... ab ... bc ... c , gdzie a , b i c są powtarzającymi się cyframi.
Przez 2 i 5
- Aby uniknąć podzielności przez 2 i 5 , c może nie być w zestawie [0, 2, 4, 5, 6, 8] . Dodatkowo, jeśli b jest członkiem tego zestawu, długość c może być nie mniejsza niż 2.
O 3
- Jeśli N = 1 (mod 3) , wówczas N może nie zawierać żadnego z [1, 4, 7] , ponieważ usunięcie któregokolwiek z nich w trywialny sposób dałoby wielokrotność 3 . Podobnie dla N = 2 (mod 3) i [2, 5, 8] . W tej implementacji zastosowano nieco osłabioną formę: jeśli N zawiera jeden z [1, 4, 7] , może nie zawierać żadnego z [2, 5, 8] i odwrotnie. Ponadto N może nie składać się wyłącznie z [0, 3, 6, 9] . Jest to w dużej mierze równoważne stwierdzenie, ale pozwala na pewne trywialne przypadki, na przykład a , b i ckażdy powtórzony 3- krotnie.
Przez 11
- jak zauważa PeterTaylor , jeśli N ma postać aabbcc ... xxyyzz , to znaczy składa się tylko z cyfr powtórzonych parzystą liczbę razy, jest on trywialnie podzielny przez 11 : a0b0c ... x0y0z . Ta obserwacja eliminuje połowę przestrzeni wyszukiwania. Jeżeli N jest długością nieparzystą, wówczas długość , b i c , powinien być dziwne, jak również (75% zmniejszenie przestrzeni poszukiwań) i, jeżeli N jest o jednakowej długości, wówczas tylko jeden z , b i c mogą być również długości (zmniejszenie przestrzeni wyszukiwania o 25%). - Przypuszczenie
: jeśli abc jest wielokrotnością 11 , na przykład 407 , wówczas wszystkie nieparzyste powtórzenia a , b i c będą również wielokrotnościami 11 . Jest to poza zakresem powyższej podzielności według zasady 11 ; w rzeczywistości tylko nieparzyste powtórzenia należą do tych, które są wyraźnie dozwolone. Nie mam na to dowodów, ale systematyczne testy nie były w stanie znaleźć kontrprzykładu. Porównaj: 444077777 , 44444000777 , 44444440000077777777777 itd.
Każdy może swobodnie udowodnić lub obalić to przypuszczenie.Od tego czasu aditsu wykazało, że jest to poprawne.Inne formy
2 zestawy powtarzających się cyfr
Liczby postaci, którą dążyła randomra , a ... ab ... b , wydają się znacznie rzadsze. Istnieje tylko 7 rozwiązań mniejszych niż 10 1700 , z których największe ma 12 cyfr.
4 zestawy powtarzających się cyfr
Numery tego formularza, a ... ab ... bc ... cd ... d , wydają się być bardziej gęsto rozmieszczone niż te, których szukałem. Istnieje 69 rozwiązań mniej niż 10 100 , w porównaniu do 32 przy użyciu 3 zestawów powtarzających się cyfr. Wartości między 10 11 a 10 100 są następujące:
Istnieje prosty heurystyczny argument, dlaczego tak powinno być. Dla każdej długości cyfrowej istnieje szereg powtarzanych zestawów (tj. 3 powtarzane zestawy lub 4 powtarzane zestawy itp.), Dla których oczekiwana liczba rozwiązań będzie najwyższa. Przejście ma miejsce, gdy liczba dodatkowych możliwych rozwiązań, wzięta za stosunek, przewyższa prawdopodobieństwo, że dodatkowa liczba do sprawdzenia jest liczbą pierwszą. Biorąc pod uwagę wykładniczy charakter możliwości sprawdzania i logarytmiczny charakter rozkładu liczb pierwszych, dzieje się to stosunkowo szybko.
Jeśli na przykład chcielibyśmy znaleźć rozwiązanie 300-cyfrowe, sprawdzenie 4 zestawów powtarzających się cyfr byłoby znacznie bardziej prawdopodobne, aby uzyskać rozwiązanie niż 3 zestawy, a 5 zestawów byłoby jeszcze bardziej prawdopodobne. Jednak przy mocy obliczeniowej, którą mam do dyspozycji, znalezienie rozwiązania znacznie większego niż 100 cyfr z 4 zestawami byłoby poza moim zasięgiem, nie mówiąc już o 5 lub 6.
źródło
d^x e^y f^z
wymaga, aby co najmniej dwie długości sekwencji były nieparzyste, aby uniknąć podzielności przez 11. Nie wiem, czyis_prime
odrzuci wielokrotności 11 wystarczająco szybko, aby nie było to warte wyraźnego uwzględnienia.(na&1)+(nb&1)+(nc&1) > 1
tyle prosty, że powinien być szybszy. Poczekaj chwilę, to może skrócić pełne gałęzie! Jeślina
jest parzyste inb + nc
dziwne, to jedno z nich[nb, nc]
musi być parzyste i możesz po prostu przejść do następnegona
.2
.1
oznacza, że jest to prawdopodobnie pierwsza liczba222223333333 (12 cyfr)
Tutaj przeszukałem tylko format aa..aabb..bb do 100 cyfr. Tylko inne trafienia to 23 37 53 73 113 311.
Kod J (oczyszczony) (przepraszam, brak wyjaśnień):
źródło
Edycja: Ktoś już zrobił głębszą analizę niż ja tutaj.
Nie rozwiązanie, ale przybliżone oszacowanie liczby n-cyfrowych rozwiązań.
Generowanie kodu J.
źródło
JavaScript (Brute Force)
Nie znalazł jeszcze większej liczby
http://jsfiddle.net/79FDr/4/
Bez biblioteki bigint JavaScript jest ograniczony do liczb całkowitych
<= 2^53
.Ponieważ jest to Javascript, przeglądarka będzie narzekać, jeśli nie zwolnimy wątku wykonania interfejsu użytkownika do aktualizacji, dlatego postanowiłem śledzić, gdzie algorytm postępuje w interfejsie użytkownika.
źródło
Link do analizy problemu został opublikowany, ale myślałem, że brakuje kilku rzeczy. Spójrzmy na liczby m cyfr, składające się z k sekwencji 1 lub więcej identycznych cyfr. Wykazano, że jeśli podzielimy cyfry na grupy {0, 3, 6, 9}, {1, 4, 7} i {2, 5, 8}, rozwiązanie nie może zawierać cyfr z drugiej i trzeciej grupy , i musi zawierać 3n + 2 cyfry z jednej z tych grup. Co najmniej dwie z k sekwencji muszą mieć nieparzystą liczbę cyfr. Spośród cyfr {1, 4, 7} tylko 1 i 7 mogą być najniższą cyfrą. Żaden z {2, 5, 8} nie może być najniższą cyfrą. Istnieją więc cztery (1, 3, 7, 9) lub dwie (3, 9) opcje dla najniższej cyfry,
Ilu jest kandydatów? Mamy m cyfr podzielonych na k sekwencji o długości co najmniej 1 cyfry. Istnieją (m - k + 1) ponad (k - 1) sposoby wyboru długości tych sekwencji, czyli około (m - 1,5k + 2) ^ (k - 1) / (k - 1) !. Dostępne są 2 lub 4 opcje dla najniższej cyfry, w sumie sześć. Dla pozostałych cyfr jest sześć opcji, z wyjątkiem 36/7 dla najwyższej cyfry; suma wynosi (6/7) * 6 ^ k. Istnieją dwa sposoby wyboru, czy długość sekwencji jest parzysta czy nieparzysta; k + 1 z nich jest wykluczonych, ponieważ żaden lub tylko jeden nie jest nieparzysty; pomnożymy liczbę wyborów przez (1 - (k + 1) / 2 ^ k), czyli 1/4, gdy k = 2, 1/2, gdy k = 3, 11/16, gdy k = 4 itd. Liczba cyfr z zestawu {1, 4, 7} lub {2, 5, 8} musi wynosić 3n + 2, więc liczba opcji jest podzielona przez 3.
Mnożąc wszystkie te liczby, liczba kandydatów wynosi
lub
Sam kandydat i liczby k utworzone przez usunięcie cyfry muszą być liczbami pierwszymi. Prawdopodobieństwo, że losowa liczba całkowita wokół N jest liczbą pierwszą, wynosi około 1 / ln N. Prawdopodobieństwo losowej liczby m wynosi około 1 / (mnn 10). Jednak liczby tutaj nie są losowe. Wszystkie zostały wybrane jako niepodzielne przez 2, 3 lub 5. 8 z dowolnych 30 kolejnych liczb całkowitych nie jest podzielnych przez 2, 3 lub 5. Dlatego prawdopodobieństwo bycia liczbą pierwszą wynosi (30/8) / (w 10) lub około 1,6286 / m.
Oczekiwana liczba rozwiązań to około
lub dla dużych m około
Dla k = 2, 3, 4, ... otrzymujemy:
Począwszy od k = 10 liczba znów się zmniejsza.
źródło