Hằng số gần đúng của Brun


25

Liên tục Brun của là giá trị mà tổng các reciprocals của Thủ đôi cặp ( 1/p1/(p+2)nơi pp+2đều nguyên tố) hội tụ. Nó là khoảng 1.902160583104.

Cho một số nguyên dương N, xấp xỉ hằng số của Brun bằng cách tính tổng các nghịch đảo của các cặp số nguyên tố sinh đôi trong đó cả hai số nguyên tố trong cặp đều nhỏ hơn Nvà đưa ra xấp xỉ.

Quy tắc

  • N sẽ là một số nguyên dương trong phạm vi đại diện cho ngôn ngữ của bạn.
  • Đầu ra phải chính xác nhất có thể với giá trị thực, trong giới hạn thực hiện dấu phẩy động của ngôn ngữ của bạn, bỏ qua mọi vấn đề tiềm ẩn do tính không chính xác của số học dấu phẩy động. Nếu ngôn ngữ của bạn có khả năng số học chính xác tùy ý, thì ít nhất nó phải chính xác như số học chính xác kép của IEEE 754.
  • Ngoài ra, một phần chính xác có thể là đầu ra ở bất kỳ định dạng nhất quán, rõ ràng.
  • Nếu một số nguyên tố xuất hiện trong nhiều cặp số nguyên tố sinh đôi (ví dụ: 5một phần của cả hai (3, 5)(5, 7)), thì đối ứng của nó đóng góp vào tổng mỗi lần.

Các trường hợp thử nghiệm

2 -> 0
6 -> 0.5333333333333333
10 -> 0.8761904761904762
13 -> 0.8761904761904762
100 -> 1.3309903657190867
620 -> 1.4999706034568274
100000 -> 1.67279958482774

Một phần chính xác có thể là đầu ra?
LegionMammal978

@ LegionMammal978 Vâng, tôi sẽ làm rõ.
Mego

Lưu ý bên lề: giá trị 1.902160583104 ... cho hằng số của Brun chỉ được phỏng đoán; thậm chí con số đáng kể đầu tiên đã được tính toán chặt chẽ (nghĩa là, thậm chí còn không biết liệu nó lớn hơn hay nhỏ hơn 2).
Greg Martin

@GregMartin Mặc dù đó là sự thật, đó cũng là xấp xỉ tốt nhất mà chúng tôi hiện có.
Mego

5 là số nguyên tố duy nhất xuất hiện trong hai cặp số nguyên tố
Christian Sievers

Câu trả lời:


25

Python 3 , 78 77 75 70 68 62 byte

f=lambda n,k=3,m=1,j=0:k<n and-m%k*j*2/k+f(n,k+2,m*k**4,m%k/k)

Cảm ơn @xnor đã chơi golf 2 4 byte và mở đường cho 4 người nữa!

Hãy thử trực tuyến!

Lý lịch

Hãy nhớ lại rằng định lý Wilson nói rằng với mọi số nguyên k> 1 ,

trong đó a ≡ b (mod d) có nghĩa là a - b chia hết cho d , nghĩa là ab có cùng dư khi chia cho d .

Trong Định lý Wilson cho Double-, Hyper-, Sub- và Super-factorial , các tác giả đã chứng minh sự khái quát hóa cho các giai thừa kép, trên đó câu trả lời này được xây dựng. Giai thừa kép của một số nguyên k 0 được xác định bởi

Định lý 4 của bài báo đã nêu ở trên.

Nâng cao cả hai mặt của sự phù hợp với quyền lực thứ tư, chúng tôi suy luận rằng

cho tất cả các số nguyên tố lẻ p . Kể từ 1 !! = 1 , tương đương giữ cho p = 2 .

Bây giờ, làm tương tự với định lý của Wilson cho thấy rằng

Kể từ khi

nó theo đó

Bất cứ khi nào p là số nguyên tố.

Bây giờ, hãy để k là một số nguyên lẻ, dương, tổng hợp. Theo định nghĩa, tồn tại các số nguyên a, b> 1 sao cho k = ab .

k là số lẻ nên ab cũng vậy . Do đó, cả hai xảy ra trong chuỗi 1, 3, Nhận, k - 2

ở đâu | chỉ ra sự chia rẽ.

Tổng hợp, cho tất cả các số nguyên lẻ k> 1

trong đó p (k) = 1 nếu k là số nguyên tố và p (k) = 0 nếu k là hợp số.

Làm thế nào nó hoạt động

Khi hàm f được gọi với một đối số duy nhất, k , mj được khởi tạo là 3 , 10 .

Lưu ý rằng ((k - 2) !!) 4 = 1 !! 4 = 1 = m . Trong thực tế, đẳng thức m = ((k - 2) !!) 4 sẽ giữ mọi lúc. j là số float và sẽ luôn bằng ((k - 4) !!) 4 % (k - 2) / (k - 2) .

Trong khi k <n , đối số đúng của andsẽ được đánh giá. Vì j = ((k - 4) !!) 4 % (k - 2) / (k - 2) , như đã được chứng minh trong đoạn đầu tiên, j = 1 / (k - 2) nếu k - 2 là số nguyên tố và j = 0 nếu không. Tương tự, vì m% k = ((k - 2) !!) 4 bằng 1 nếu k là số nguyên tố và 0 nếu không, -m% k = k - 1 nếu k là số nguyên tố và -m% k = 0 nếu không. Do đó, ước tính -m%k*j*2/kthành 2 (k - 1) / (k (k - 2)) = ((k - 2) + k) / (k (k - 2)) = 1 / k + 1 / (k - 2) nếu cặp (k - 2, k)bao gồm các số nguyên tố sinh đôi và 0 nếu không.

Sau khi tính toán ở trên, chúng tôi thêm kết quả vào giá trị trả về của cuộc gọi đệ quy f(n,k+2,m*k**4,m%k/k). k được tăng lên 2 nên chỉ lấy các giá trị lẻ , chúng ta nhân m với k 4mk 4 = ((k - 2) !!) 4 k 4 = (k !!) 4 và vượt qua giá trị hiện tại của m% k / k - bằng 1 / k nếu "cũ" k là số nguyên tố và 0 nếu không - như tham số j cho lệnh gọi hàm.

Cuối cùng, một khi k bằng hoặc lớn hơn n , f sẽ trả về Sai và dừng đệ quy. Giá trị trả về của f (n) sẽ là tổng của tất cả 1 / k + 1 / (k - 2) như vậy (k - 2, k) là một cặp số nguyên tố sinh đôi và k <n , như mong muốn.


Các kết quả từ những nền đoạn giữ chỉ dành cho số nguyên lẻ. Vì các số nguyên thậm chí không thể là số nguyên tố sinh đôi, chúng ta có thể bỏ qua chúng một cách an toàn.


Tôi nghĩ rằng biểu hiện của bạn là giống như m%k*(j/k+j/(k-2)).
xnor

Vâng, nó hoạt động. Cảm ơn!
Dennis


Quan sát đẹp mà ((k-2)!!)^4 = p(k)modulo pcho lẻ p. Tôi đã không làm việc thông qua lập luận của bạn, nhưng đây là một trong những điều tôi nghĩ ra (về bản chất có thể giống nhau). Làm việc modulo ptrong tập hợp {1,2,..,p-1}, evens chính xác là tiêu cực của tỷ lệ cược. Vì vậy, prod(odds) = ± prod(evens). Định lý Wilson cho chúng ta biết điều đó prod(all) = - p(k). Kể từ đó prod(all) = prod(odds) * prod(evens) = prod(odds) * ± prod(evens), chúng tôi có prod(odds)^2 = ±p(k)và như vậy prod(odds)^4 = p(k)^2 = p(k).
xnor

Tốt đẹp! Tôi đã cố gắng biểu thị tổng dưới dạng một phần nhỏ, nhưng phần tính toán của nó trong j đã không xảy ra với tôi. Cảm ơn một lần nữa! Bằng chứng của bạn đơn giản hơn rất nhiều so với bằng chứng từ bài báo.
Dennis

7

Thạch , 15 14 byte

’ÆRµ_2fµ+2;µİS

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

’ÆRµ_2fµ+2;µİS  Main link. Argument: n

’               Decrement; yield n-1.
 ÆR             Prime range; yield all primes in [1, ..., n-1].
   µ            New chain. Argument: r (prime range)
    _2          Subtract 2 from all primes.
      f         Filter; keep all p-2 that appear in r.
       µ        New chain. Argument: t (filtered range)
        +2      Add 2 to all primes in s.
          ;     Concatenate with s.
           µ    New chain. Argument: t (twin primes)
            İ   Take the inverses.
             S  Sum.

5

Jelly , 16 14 byte (với một chút trợ giúp từ @Dennis)

’ÆRṡ2_/2+$$ÐḟFİS

Hãy thử trực tuyến!

Trong khi cố gắng cải thiện câu trả lời trước đây của mình, tôi đã nghĩ ra một thuật toán hoàn toàn khác, và nó có phần ngắn hơn. Tôi đang sử dụng một bài viết khác cho nó, như là tiêu chuẩn ở đây cho một câu trả lời sử dụng một kỹ thuật khác.

Dennis đề nghị thay thế _/2+$$Ðḟbằng Iċ¥Ðf2; Tôi hoàn toàn quên mất khả năng của một bộ lọc dyadic. Như vậy, thuật toán này hiện liên kết với câu trả lời mà Dennis đã sử dụng.

Giải trình

’ÆRṡ2Iċ¥Ðf2FİS
’                  Decrement.
 ÆR                Primes from 2 to the argument inclusive
                   (i.e. 2 to the original input exclusive).
   ṡ2              Take overlapping slices of size 2.
        Ðf         Keep only elements where the following is true:
       ¥           {the second parse of, which parses like this}
     Iċ   2          the differences (I) contain (ċ) 2
           F       Flatten.
            İ      Take 1/x {for every list element}.
             S     Sum.

2_/2+$$Ðḟcó thể trở thành Iċ¥Ðf2.
Dennis

4

Brachylog , 17 byte

{>I-₂:I{ṗ/₁}ᵐ}ᶠc+

Hãy thử trực tuyến!

Đây là phiên bản hoàn toàn mới của Brachylog, với trang mã sáng bóng!

Giải trình

{            }ᶠ        Find all valid outputs of the predicate in brackets
               c+      Output is the sum of that list after flattening it

 >I                    Input > I
   -₂:I                The list [I-2, I]
       {   }ᵐ          Map:
        ṗ/₁              Must be prime and the output is its inverse

3

MATL , 16 byte

liqZqtd2=)t2+h/s

Hãy thử trực tuyến!

Hãy xem xét đầu vào 13là một ví dụ.

l     % Push 1
      %   STACK: 1
i     % Input N
      %   STACK: 1, 13
q     % Subtract 1
      %   STACK: 1, 12
Zq    % Primes up to that
      %   STACK: 1, [2 3 5 7 11]
t     % Duplicate
      %   STACK: 1, [2 3 5 7 11], [2 3 5 7 11]
d     % Consecutive differences
      %   STACK: 1, [2 3 5 7 11], [1 2 2 4]
2=    % Compare with 2, element-wise
      %   STACK: 1, [2 3 5 7 11], [0 1 1 0]
)     % Use as logical index to select elements from array
      %   STACK: 1, [3 5]
t     % Duplicate
      %   STACK: 1, [3 5], [3 5]
2+    % Add 2, element-wise
      %   STACK: 1, [3 5], [5 7]
h     % Concatenate horizontally
      %   STACK: 1, [3 5 5 7]
/     % Divide, element-wise
      %   STACK: [0.3333 0.2 0.2 0.1429]
s     % Sum of array. Implicitly display
      %   STACK: 0.8762

2

Toán học, 48 47 byte

Cảm ơn JungHwan Min đã tiết kiệm 1 byte!

If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]~Sum~{i,#-1}&

Hàm không tên lấy một số nguyên dương làm đầu vào và trả về một phân số chính xác; ví dụ, If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]~Sum~{i,#-1}&[10]trả về 92/105.

If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]kiểm tra xem cả hai ii-2có phải là số nguyên tố hay không, trả về tổng số đối ứng của chúng nếu có và 0nếu không. ~Sum~{i,#-1}&sau đó trả về tổng của những đóng góp đó cho tất cả các giá trị inhỏ hơn đầu vào.

Trình trước:

If[And@@PrimeQ@{i,g=i-2},1/i+1/g,0]~Sum~{i,#-1}&

Bây giờ chỉ là ma quái. Tôi từ bỏ. ⚐
LegionMammal978

Tôi tự hỏi liệu "phân số chính xác" có nghĩa là Mathicala :)
Greg Martin

-1 byte:If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]~Sum~{i,#-1}&
JungHwan Min

Người ta có thể nhận được một số chính xác tùy ý bằng cách thêm hai byte N@, ở phía trước mã.
JungHwan Min

Chơi golf đẹp của điều kiện! Đúng là Ntrả về xấp xỉ thập phân cho một số thực; tuy nhiên, nó yêu cầu thêm byte để hiển thị hơn 6 hình ghép sig hoặc hơn thế, và cho dù có bao nhiêu hình ghép sig được hiển thị, nó vẫn kém chính xác hơn chính phân số.
Greg Martin

2

Octave, 45 byte

@(n)sum(all(isprime(m=[h=3:n-1;h-2]))*m'.^-1)

Giải trình:

m=[h=3:n-1;h-2]             generate an concatenate two ranges 3:n-1 and 1:n-3
rec=m'.^-1                  transpose and reciprocal
idx=all(isprime(m))         create a logical [0 1 ..] array  if both ranges are prime set 1 else set 0
sum1 = idx * rec            matrix multiplication(extrat elements with logical index and sum along the first dimension)
sum(sum1)                   sum along the second dimension  

Dùng thử trực tuyến!


2

JavaScript (ES6), 67 66 byte

Đã lưu 1 byte nhờ @Arnauld

f=n=>--n>1&&((p=x=>n%--x?p(x):x==1)(n)&&p(n-=2)&&1/n+++1/++n)+f(n)

Đầu ra falsecho trường hợp thử nghiệm 2, được cho phép theo mặc định .

Kiểm tra đoạn


Tôi nghĩ 1/n+++1/++ntiết kiệm một byte.
Arnauld

@Arnauld Cảm ơn. Vì một số lý do, tôi đã không biết rằng +++không phải lúc nào cũng gây ra lỗi ...
Sản phẩm ETH


1

Thạch , 19 byte

’ÆRḊµ_Æp=2Tịµ_2;µİS

Hãy thử trực tuyến!

Tôi có cảm giác rằng điều này là ngẫu hứng, nhưng tôi không thể thấy ngay được.

Giải trình

’ÆRḊµ_Æp=2Tịµ_2;µİS
 ÆR                  Generate all primes from 2 to n inclusive
’                    Subtract 1
   Ḋ                 Remove first element
’ÆRḊ                 Generate all primes from 3 to n-1 exclusive

     _Æp             Subtract the previous prime (i.e. calculate the prime gap)
        =2           Compare to 2
          Tị         Take elements of the input where the comparison is true
     _Æp=2Tị         Filter a list of primes to the latter halves of prime pairs

             _2      Subtract 2
               ;     Append
             _2;     Append the list to the list with 2 subtracted from it
                 İ   Take reciprocals
                  S  Sum
                 İS  Take the sum of the reciprocals

Kết µnối tất cả các phần này với nhau theo kiểu đường ống, với mỗi phần lấy đầu ra của phần trước làm đầu vào của nó.



1

Perl 6 , 59 51 byte

{sum 1 «/»grep((*-(2&0)).is-prime,^$_).flatmap:{$_-2,$_}}

{sum 1 «/»grep(*.all.is-prime,(-2..*Z ^$_)).flat}

-2..* Z ^$_nén danh sách vô hạn -2, -1, 0, 1, ...với danh sách 0, 1, ... $_-1( $_là đối số của hàm), tạo ra danh sách (-2, 0), (-1, 1), (0, 2), ..., ($_-3, $_-1). (Rõ ràng không có số nào dưới 3 số này có thể nằm trong cặp số nguyên tố, nhưng3..* Z 5..^$_ dài hơn một vài byte và không có số nào trong số đó là số nguyên tố.)

Các greplựa chọn chỉ chọn những cặp trong đó tất cả các số (có nghĩa là cả hai) là số nguyên tố và flatlàm phẳng chúng thành một danh sách đơn giản các số.

«/»là siêu phẫu thuật phân chia; với danh sách bên phải và 1bên trái, nó biến danh sách các cặp số nguyên tố thành đối ứng của chúng, sau đó được tóm tắt bằng sum.


1

Clojure, 147 byte

(fn[n](let[p #(if(> % 2)(<(.indexOf(for[a(range 2 %)](mod % a))0)0))](reduce +(for[a(range 2 n)](if(and(p a)(p(- a 2)))(+(/ 1 a)(/ 1(- a 2)))0)))))

Và Clojure đến cuối cùng, như thường lệ.

Ung dung:

; Returns the primality of a number.
(defn prime? [n]
  (if (> n 2)
    (< (.indexOf (for [a (range 2 n)] (mod n a)) 0) 0)))

; Calculates the actual Brun's Constant. ' (Stupid highlighter)
(defn brunsconst [n]
  ; Adds all of the entries together
  (reduce
    +
    ; For a in range(2, n):
    (for [a (range 2 n)]
      (let [b (- a 2)]
        ; If both a and a-2 are prime:
        (if (and (prime? a) (prime? b))
          ; Place (1/a + 1/a-2) on the array, else 0
          (+ (/ 1 a) (/ 1 b)) 0)))))


0

Tiện ích Bash + GNU, 86 85 byte

for((k=4;k<$1;k++,j=k-2)){ [ `factor $k $j|wc -w` = 4 ]&&x=$x+1/$k+1/$j;};bc -l<<<0$x

Hãy thử trực tuyến!

Xây dựng một biểu thức số học lớn và sau đó cung cấp cho nó bc -lđể đánh giá nó.

Chỉnh sửa: Bỏ nhầm trong cặp $ (...) từ phiên bản cũ có thay thế lệnh lồng nhau; thay đổi thành backticks để lưu một byte.


0

APL NARS, 216 byte, 108 ký tự

  r←z n;h;i;k;v
  i←0⋄n-←1⋄h←1+⍳n-1⋄→B
A:k←i⊃h⋄h←k∪(0≠k∣h)/h
B:→A×⍳(⍴h)≥i+←1
  r←+/÷(v-2),v←(h=1⌽h+2)/h

điều này sẽ sử dụng "Crivello di Eratostene" để tìm danh sách con trong 1..arg of primes request. Kiểm tra:

  z¨2 6 10 13 100 620
0 0.5333333333 0.8761904762 0.8761904762 1.330990366 1.499970603 
  z 100000
1.672799585
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.