대략적인 Brun 상수


25

Brun의 상수 는 쌍 소수 쌍 의 왕복의 합 ( 1/p1/(p+2)위치 pp+2둘 다 소수)의 합이 수렴되는 값입니다. 대략 1.902160583104입니다.

양의 정수가 주어지면 N쌍의 소수가 모두 미만인 쌍 소수 쌍의 역수를 합하여 근사값을 출력하여 Brun의 근사값을 구합니다 N.

규칙

  • N 언어의 표현 가능한 범위 내의 양의 정수입니다.
  • 출력은 부동 소수점 산술 부정확성으로 인한 잠재적 인 문제를 무시하고 언어의 부동 소수점 구현 한계 내에서 가능한 한 정확한 값으로 정확해야합니다. 귀하의 언어가 임의의 정밀 산술을 할 수있는 경우, 최소한 IEEE 754 배정 밀도 산술만큼 정확해야합니다.
  • 대안 적으로, 정확한 분수는 임의의 일관되고 명확한 형식으로 출력 될 수있다.
  • 프라임이 여러 쌍의 프라임 쌍 (예 : 및 5모두의 일부)으로 나타나는 경우 그 역수는 매번 합계에 기여합니다.(3, 5)(5, 7)

테스트 사례

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

정확한 분수를 출력 할 수 있습니까?
LegionMammal978

@ LegionMammal978 예, 명확히하겠습니다.
Mego

참고 사항 : Brun 상수에 대한 값 1.902160583104 ...는 추측입니다. 첫 번째 유의미한 수치조차 엄격하게 계산되지 않았습니다 (즉, 2보다 크거나 작은 지조차 알 수 없음).
Greg Martin

@GregMartin 사실이지만 현재 우리가 가진 최고의 근사치이기도합니다.
Mego

5는 두 개의 소수 쌍으로 나타나는 유일한 소수입니다
Christian Sievers

답변:


25

파이썬 3 , 78 77 75 70 68 62 바이트

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)

2 4 바이트 를 골라 내고 4 개 더 길을 포장 한 @xnor에게 감사합니다 !

온라인으로 사용해보십시오!

배경

리콜이 윌슨의 정리 된 상태 모든 정수의 K> 1 ,

여기서 ≡의 B (MOD d)는 것을 의미 A - B는 균등하게 나눌 D 즉, 와 b를 나눈 경우에 동일한 잔기가 D .

에서 , 두 번 하이퍼, 하위 및 슈퍼 계승에 대한 윌슨 정리 (theorem) , 저자는이 답변 빌드하는 이중 계승에 대한 일반화를 증명한다. 정수 k ≥ 0이중 계승 은 다음과 같이 정의됩니다.

전술 한 논문의 정리 4는 다음을 기술한다.

합동의 양쪽을 제 4의 힘으로 높이면, 우리는

모든 홀수 소수 p . 1 부터 ! = 1 이면 동등성은 p = 2 도 보유 합니다.

이제 윌슨의 정리와 똑같이하면

이후

그것은 다음과 같습니다

p 가 소수 일 때마다

이제 k를 홀수, 양의 복합 정수로 하자 . 정의에 의해, 정수에게 존재 A, B> 1 이되도록 K = AB를 .

이후 K가 홀수이기 때문에,이다 와 B를 . 따라서 둘 다 시퀀스 1, 3,…, k-2에서 발생 하며

어디 | 분할 성을 나타냅니다.

모든 홀수 정수 k> 1

여기서, P (k)는 (1) = 경우 K는 소수이고, P (k)는 = 0 인 경우 , k는 복합체이다.

작동 원리

함수 f 가 단일 인수로 호출되면 k , mj3 , 10 으로 초기화됩니다 .

주의 ((K - 2)!) 4 = 1! 4 = 1 = m 입니다. 실제로, 평등 m = ((k-2) !!) 4 는 항상 유지됩니다. j실수 이며 항상 ((k-4) !!) 4 % (k-2) / (k-2)와 같습니다 .

k <n 동안 올바른 인수 and가 평가됩니다. 사람 J = ((K - 4)!) 4 % (K - 2) / (K - 2) 첫 번째 단락 입증으로서, J = 1 / (K - 2) 만약 K - 2 프라임이고 J 그렇지 않으면 = 0 입니다. 마찬가지로, 이후 m의 %의 K = ((K - 2)!) 4 같음 1 경우 K는 소수이고 0 이 아닌 경우 -m % K = K - 1 경우 K는 소수 및 -m % K = 0 이 아니라면. 따라서, -m%k*j*2/k평가 2 (K - 1) / (K (K - 2)) = ((K - 2) + K) / (K (K - 2)) = 1 / K + 1 / (k는 - 2) 쌍이면 (k-2, k)트윈 소수로 구성되며 그렇지 않은 경우 0으로 구성됩니다 .

위를 계산 한 후 재귀 호출의 반환 값에 결과를 추가합니다 f(n,k+2,m*k**4,m%k/k). k2 씩 증가 하므로 홀수 값만 취합니다. mk 4 = ((k-2) !!) 4 k 4 = (k !!) 4 이므로 mk 4를 곱하고 현재 값을 전달합니다. m % k / k – "old" k 가 소수 이면 1 / k 와 같고 그렇지 않으면 0 – 함수 호출에 대한 매개 변수 j .

마지막으로 kn 이상 이면 fFalse 를 반환 하고 재귀는 중지됩니다. 반환 값 F (N)을 모두 합한 것이다 - 1 / K + 1 / (2 K) 등의 (K - 2, K) 트윈 프라임 쌍이고 K <N 원하는가.


로부터의 결과 배경 홀수 정수의 단락 보류. 정수조차도 쌍 소수가 될 수 없으므로 안전하게 건너 뛸 수 있습니다.


나는 당신의 표현이와 같다고 생각합니다 m%k*(j/k+j/(k-2)).
xnor

그렇습니다. 감사!
Dennis


홀수에 대한 ((k-2)!!)^4 = p(k)모듈로의 좋은 관찰 . 나는 당신의 논쟁을 겪지 않았지만 여기에 내가 생각해 낸 것이 있습니다 (본질적으로 동일 할 수 있습니다). 집합에서 일하는 모듈로 , 짝수는 확률의 부정입니다. 그래서 . 윌슨의 정리는 우리에게 말합니다 . 그 이후 로 우리는 그렇게했습니다 . ppp{1,2,..,p-1}prod(odds) = ± prod(evens)prod(all) = - p(k)prod(all) = prod(odds) * prod(evens) = prod(odds) * ± prod(evens)prod(odds)^2 = ±p(k)prod(odds)^4 = p(k)^2 = p(k)
xnor

좋은! 나는 합계를 단일 분수로 표현하려고 시도했지만 j 로 그 일부를 계산 하지 못했습니다. 다시 감사합니다! 당신의 증거는 종이의 것보다 훨씬 간단합니다.
Dennis

7

젤리 , 15 14 바이트

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

온라인으로 사용해보십시오!

작동 원리

’Æ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

젤리 , 16 14 바이트 (@Dennis의 작은 도움으로)

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

온라인으로 사용해보십시오!

이전 답변을 개선하려고하는 동안 완전히 다른 알고리즘을 생각했으며 다소 짧았습니다. 다른 기술을 사용하는 답변의 표준과 마찬가지로 다른 게시물을 사용하고 있습니다.

데니스 대체 제안 _/2+$$ÐḟIċ¥Ðf2; 가변 필터의 가능성을 완전히 잊었습니다. 따라서이 알고리즘은 이제 Dennis의 답변에서 사용한 알고리즘과 연결됩니다.

설명

’Æ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+$$Ðḟ될 수 있습니다 Iċ¥Ðf2.
Dennis

4

Brachylog , 17 바이트

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

온라인으로 사용해보십시오!

반짝이는 코드 페이지가있는 Brachylog의 새로운 버전입니다!

설명

{            }ᶠ        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 바이트

liqZqtd2=)t2+h/s

온라인으로 사용해보십시오!

13예를 들어 입력 을 고려하십시오 .

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

매스 매 티카, 48 47 바이트

1 바이트를 절약 한 JungHwan Min에게 감사합니다!

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

이름없는 함수를 입력으로 양의 정수를 사용하고 정확한 분수를 반환합니다. 예를 If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]~Sum~{i,#-1}&[10]들어을 반환합니다 92/105.

If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]소수 ii-2소수 모두를 테스트 하여 상호 합의 경우 합산 여부를 반환합니다 0. ~Sum~{i,#-1}&그런 다음 i입력 값 보다 작은 모든 값에 대한 기여의 합계를 반환합니다 .

이전 제출 :

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

이제는 짜증입니다. 나는 포기한다. ⚐
LegionMammal978

"정확한 분수"가 Mathematica를 의미하는지 궁금했습니다. :
Greg Martin

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

N@코드 앞에 2 바이트를 추가하여 임의의 정밀도 숫자를 얻을 수 있습니다 .
JungHwan Min

컨디션의 좋은 골프! N십진수 근사값을 실수로 리턴하는 것은 사실입니다 . 그러나 6 시그 이상의 그림을 표시하려면 여분의 바이트가 필요하며, 얼마나 많은 시그 그림이 표시 되더라도 분수 자체보다 정확도가 떨어집니다.
Greg Martin

2

옥타브, 45 바이트

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

설명:

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  

온라인으로 사용해보십시오!


2

자바 스크립트 (ES6), 67 66 바이트

@Arnauld 덕분에 1 바이트를 절약했습니다.

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

false테스트 케이스의 출력 으로 2, 기본적으로 허용됩니다 .

테스트 스 니펫


1/n+++1/++n바이트를 절약 한다고 생각 합니다.
Arnauld

@Arnauld 감사합니다. 내가 모르는 어떤 이유로 +++하지 않습니다 항상 ... 오류가 발생
ETHproductions


1

젤리 , 19 바이트

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

온라인으로 사용해보십시오!

나는 이것이 불가능하다는 느낌이 들지만 즉시 방법을 볼 수는 없습니다.

설명

’Æ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

µ모든 부분을 파이프 라인 스타일로 연결하십시오. 각 부분은 이전의 출력을 입력으로 사용합니다.



1

펄 6 , 59 51 바이트

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

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

-2..* Z ^$_무한리스트 -2, -1, 0, 1, ...를리스트 0, 1, ... $_-1( $_함수의 인수)로 압축하여리스트를 생성합니다 (-2, 0), (-1, 1), (0, 2), ..., ($_-3, $_-1). (이 숫자 중 3보다 작은 숫자는 소수가 될 수 없지만 3..* Z 5..^$_몇 바이트는 더 길며 여분의 숫자는 소수가 아닙니다.)

grep선택에만 모두 (즉, 모두) 숫자는 소수입니다 그 쌍, 그리고 flat숫자의 일반 목록으로 평평하게 그들.

«/»부서 하이퍼 오퍼레이터입니다. 오른쪽과 1왼쪽에있는 목록과 함께 소수 쌍의 목록을 역수로 바꾸고로 요약됩니다 sum.


1

클로저, 147 바이트

(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)))))

Clojure는 평소와 같이 마지막으로 죽습니다.

언 골프 드 :

; 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

Bash + GNU 유틸리티, 86 85 바이트

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

온라인으로 사용해보십시오!

큰 산술 표현식을 구성한 다음이 bc -l를 평가 하기 위해 피드 합니다.

편집 : 중첩 된 명령 대체로 이전 버전의 $ (...) 쌍에 실수로 남았습니다. 바이트를 저장하기 위해 백틱으로 변경되었습니다.


0

APL NARS, 216 바이트, 108 자

  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

이것은 요청 프라임의 1..arg에서 서브리스트를 찾기 위해 "Crivello di Eratostene"을 사용합니다. 테스트:

  z¨2 6 10 13 100 620
0 0.5333333333 0.8761904762 0.8761904762 1.330990366 1.499970603 
  z 100000
1.672799585
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.