Stała Bruna to wartość, z którą sumuje się odwrotność podwójnych par liczb pierwszych ( 1/p
i 1/(p+2)
gdzie p
i p+2
obie są liczbami pierwszymi). Jest w przybliżeniu 1.902160583104
.
Biorąc pod uwagę dodatnią liczbę całkowitą N
, przybliż przybliżoną stałą Bruna, sumując odwrotności podwójnych par liczb pierwszych, gdzie obie liczby pierwsze w parze są mniejsze N
, i wyprowadzaj przybliżenie.
Zasady
N
będzie dodatnią liczbą całkowitą w reprezentatywnym zakresie dla twojego języka.- Dane wyjściowe muszą być możliwie dokładne z prawdziwą wartością, w granicach implementacji zmiennoprzecinkowej języka, ignorując wszelkie potencjalne problemy wynikające z niedokładności arytmetycznych zmiennoprzecinkowych. Jeśli twój język jest zdolny do arytmetyki o dowolnej precyzji, musi być co najmniej tak dokładny jak arytmetyka o podwójnej precyzji IEEE 754.
- Alternatywnie, dokładna część może być wyprowadzona w dowolnym spójnym, jednoznacznym formacie.
- Jeśli liczba pierwsza występuje w wielu podwójnych parach liczby pierwszej (np. Jako
5
część obu(3, 5)
i(5, 7)
), jej wzajemność przyczynia się do sumy za każdym razem.
Przypadki testowe
2 -> 0
6 -> 0.5333333333333333
10 -> 0.8761904761904762
13 -> 0.8761904761904762
100 -> 1.3309903657190867
620 -> 1.4999706034568274
100000 -> 1.67279958482774
Odpowiedzi:
Python 3 ,
787775706862 bajtówDzięki @xnor za grę w golfa z
24 bajtami i torowanie drogi dla 4 kolejnych!Wypróbuj online!
tło
Przypomnijmy, że twierdzenie Wilsona stwierdza, że dla wszystkich liczb całkowitych k> 1 ,
gdzie ≡ b (mod d) środki, a - b jest podzielna przez D , to znaczy i b mają taką samą pozostałości po podzieleniu przez d .
W Twierdzeniach Wilsona dla podwójnych, super-, sub- i superczynnikowych autorzy dowodzą uogólnień dla podwójnych silni, na których opiera się ta odpowiedź. Dwukrotnie silnia liczby całkowitej K ≥ 0 jest określona
Twierdzenie 4 powyższej pracy stwierdza, co następuje.
Podnosząc obie strony przystawek do czwartej potęgi, dedukujemy to
dla wszystkich liczb nieparzystych p . Od 1 !! = 1 , równoważność obowiązuje również dla p = 2 .
Teraz uczynienie tego samego z twierdzeniem Wilsona ujawnia to
Od
wynika, że
ilekroć p jest liczbą pierwszą.
Teraz niech k będzie nieparzystą, dodatnią liczbą całkowitą złożoną. Z definicji istnieją liczby całkowite a, b> 1 takie, że k = ab .
Ponieważ k jest nieparzyste, więc są i b . Zatem oba występują w sekwencji 1, 3,…, k - 2 i
gdzie | wskazuje podzielność.
Podsumowując, dla wszystkich nieparzystych liczb całkowitych k> 1
gdzie p (k) = 1, jeśli k jest liczbą pierwszą, a p (k) = 0, jeśli k jest złożone.
Jak to działa
Gdy funkcja f jest wywoływana za pomocą jednego argumentu, k , m i j są inicjalizowane jako 3 , 1 i 0 .
Zauważ, że ((k - 2) !!) 4 = 1 !! 4 = 1 = m . W rzeczywistości równość m = ((k - 2) !!) 4 utrzyma się przez cały czas. j jest liczbą zmiennoprzecinkową i zawsze będzie równa ((k - 4) !!) 4 % (k - 2) / (k - 2) .
Podczas gdy k <n , właściwy argument
and
zostanie oceniony. Ponieważ j = ((k - 4) !!) 4 % (k - 2) / (k - 2) , jak wykazano w akapicie pierwszym, j = 1 / (k - 2), jeśli k - 2 jest liczbą pierwszą, a j = 0, jeśli nie. Podobnie, ponieważ m% k = ((k - 2) !!) 4 równa się 1, jeśli k jest liczbą pierwszą, a 0, jeśli nie, -m% k = k - 1, jeśli k jest liczbą pierwszą, i -m% k = 0, jeśli nie. Dlatego-m%k*j*2/k
ocenia na 2 (k - 1) / (k (k - 2)) = ((k - 2) + k) / (k (k - 2)) = 1 / k + 1 / (k - 2) jeśli para (k - 2, k)składa się z podwójnych liczb pierwszych i do 0, jeśli nie.Po obliczeniu powyższego dodajemy wynik do wartości zwracanej wywołania rekurencyjnego
f(n,k+2,m*k**4,m%k/k)
. k zostaje zwiększone o 2, więc przyjmuje tylko nieparzyste wartości ‡ † , mnożymy m przez k 4, ponieważ mk 4 = ((k - 2) !!) 4 k 4 = (k !!) 4 , i przekazujemy bieżącą wartość m% k / k - co równa się 1 / k, jeśli „stare” k jest liczbą pierwszą, a 0, jeśli nie - jako parametr j do wywołania funkcji.W końcu, gdy k będzie równe lub większe niż n , f zwróci False i rekursja się zatrzyma. Zwracana wartość f (n) będzie sumą wszystkich 1 / k + 1 / (k - 2), takich jak (k - 2, k) jest podwójną parą pierwszą i k <n , zależnie od potrzeb.
‡ Wyniki z akapitu Tło zachowują się tylko dla nieparzystych liczb całkowitych. Ponieważ nawet liczby całkowite nie mogą być liczbami podwójnymi, możemy je bezpiecznie pominąć.
źródło
m%k*(j/k+j/(k-2))
.((k-2)!!)^4 = p(k)
modulop
na dziwnep
. Nie przepracowałem twojego argumentu, ale oto jeden, który wymyśliłem (może to być w istocie to samo). Pracuj modulop
w zestawie{1,2,..,p-1}
, wyrównania są dokładnie ujemne dla szans. Więcprod(odds) = ± prod(evens)
. Twierdzenie Wilsona mówi nam toprod(all) = - p(k)
. Ponieważprod(all) = prod(odds) * prod(evens) = prod(odds) * ± prod(evens)
mamyprod(odds)^2 = ±p(k)
i takprod(odds)^4 = p(k)^2 = p(k)
.Galaretka ,
1514 bajtówWypróbuj online!
Jak to działa
źródło
Galaretka ,
1614 bajtów (z niewielką pomocą @Dennis)Wypróbuj online!
Próbując ulepszyć moją poprzednią odpowiedź, wymyśliłem zupełnie inny algorytm, który jest nieco krótszy. Używam do tego innego wpisu, co jest tutaj standardem dla odpowiedzi, która używa innej techniki.
Dennis sugeruje zastąpienie
_/2+$$Ðḟ
zIċ¥Ðf2
; Zupełnie zapomniałem o możliwości filtra dyadycznego. Jako taki, ten algorytm jest teraz powiązany z tym, którego użyła odpowiedź Dennisa.Wyjaśnienie
źródło
2_/2+$$Ðḟ
może zostaćIċ¥Ðf2
.Brachylog , 17 bajtów
Wypróbuj online!
To jest zupełnie nowa wersja Brachylog z błyszczącą stroną kodową!
Wyjaśnienie
źródło
MATL , 16 bajtów
Wypróbuj online!
Rozważ dane wejściowe
13
jako przykład.źródło
Mathematica,
4847 bajtówDzięki JungHwan Min za oszczędność 1 bajtu!
Nienazwana funkcja przyjmuje dodatnią liczbę całkowitą jako dane wejściowe i zwraca dokładną część; na przykład
If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]~Sum~{i,#-1}&[10]
zwraca92/105
.If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]
Sprawdza, czy obai
ii-2
są pierwszymi, wracając suma ich odwrotności jeśli tak i0
jeśli nie.~Sum~{i,#-1}&
następnie zwraca sumę tych wkładów dla wszystkich wartościi
mniejszych niż dane wejściowe.Poprzednie zgłoszenie:
źródło
If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]~Sum~{i,#-1}&
N@
przed kodem.N
zwraca dziesiętne przybliżenie do liczby rzeczywistej; wymaga to jednak dodatkowych bajtów, aby wyświetlić więcej niż 6 fig sig, i bez względu na liczbę wyświetlanych fig sig, nadal jest mniej dokładna niż sama frakcja.Oktawa, 45 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
JavaScript (ES6),
6766 bajtówZapisano 1 bajt dzięki @Arnauld
Dane wyjściowe
false
dla przypadku testowego2
, który jest domyślnie dozwolony .Testowy fragment kodu
Pokaż fragment kodu
źródło
1/n+++1/++n
oszczędza bajt.+++
nie zawsze powoduje to błąd ...05AB1E ,
1914 bajtów (-5 @Emigna)Wypróbuj online!
źródło
<LDpÏÍDpÏDÌ«zO
aby zapisać 5 bajtów.Galaretka , 19 bajtów
Wypróbuj online!
Mam wrażenie, że można to poprawić, ale nie od razu widzę, jak to zrobić.
Wyjaśnienie
W
µ
Połącz wszystkie te elementy razem rurociąg stylu, z każdym biorąc wyjście jednego zanim jako jego wejścia.źródło
Pyth -
222117 bajtówMyślę, że refaktoryzacja pomoże.
Pakiet testowy .
źródło
Perl 6 ,
5951 bajtów{sum 1 «/»grep((*-(2&0)).is-prime,^$_).flatmap:{$_-2,$_}}
-2..* Z ^$_
zamyka nieskończoną listę-2, -1, 0, 1, ...
listą0, 1, ... $_-1
($_
będącą argumentem funkcji), tworząc listę(-2, 0), (-1, 1), (0, 2), ..., ($_-3, $_-1)
. (Oczywiście żadna z tych liczb mniejszych niż 3 nie może być w pierwszej parze, ale3..* Z 5..^$_
jest o kilka bajtów dłuższa i żadna z dodatkowych liczb nie jest liczbą pierwszą).The
grep
wybiera tylko te pary, gdy wszystkie (to jest zarówno) Liczby Prime iflat
spłaszcza je w zwykły listę numerów.«/»
jest hiperoperatorem podziału; z listą po prawej i1
po lewej stronie zmienia listę par pierwszych w ich odwrotność, którą następnie sumujesum
.źródło
Clojure, 147 bajtów
A Clojure jak zwykle jest martwy.
Nie golfowany:
źródło
Julia 0.4 ,
4846 bajtówWypróbuj online!
źródło
Narzędzia Bash + GNU,
8685 bajtówWypróbuj online!
Konstruuje duże wyrażenie arytmetyczne, a następnie podaje je do
bc -l
do oceny.Edycja: błędnie pozostawiony w parze $ (...) ze starej wersji z zagnieżdżonym zastępowaniem poleceń; zmieniono na backticks, aby zapisać bajt.
źródło
APL NARS, 216 bajtów, 108 znaków
użyłoby to „Crivello di Eratostene” do znalezienia podlisty w 1..arg liczb pierwszych żądań. Test:
źródło