Yaklaşık Brun's Constant


25

Brun sabiti reciprocals toplamı olan değerdir ikiz asal çifti ( 1/pve 1/(p+2)burada pve p+2yakınsak iki asal). Yaklaşık olarak 1.902160583104.

Olumlu bir tamsayı verildiğinde N, çiftin her iki primenin de daha az olduğu çift asal çiftlerin karşılıklılarını toplayarak yaklaşık Brun sabiti Nve yaklaşık değeri verir.

kurallar

  • N Diliniz için temsil edilebilir bir aralıkta pozitif bir tamsayı olacak.
  • Çıktı, dilinizin kayan nokta uygulamasının sınırları dahilinde, kayan nokta aritmetik yanlışlıkları nedeniyle ortaya çıkabilecek olası sorunları göz ardı ederek gerçek değere mümkün olduğu kadar doğru olmalıdır. Diliniz rasgele kesinlikli aritmetik yeteneğine sahipse, en az IEEE 754 çift kesitli aritmetik kadar kesin olmalıdır.
  • Alternatif olarak, kesin bir kesir, herhangi bir tutarlı, kesin olmayan biçimde çıkarılabilir.
  • Birden ikiz asal çiftleri (örneğin, önemli bir konumda görünür Eğer 5ikisinin, parça (3, 5)ve (5, 7)toplamı), onun karşılıklı katkıda bulunan her zaman.

Test Kılıfları

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

Kesin bir fraksiyon elde edilebilir mi?
LegionMammal978 0

@ LegionMammal978 Evet, netleştireceğim.
Mego

Yan not: Brun'ın sabiti için 1.902160583104 ... değeri yalnızca tahmin edilmiştir; ilk önemli rakam bile titizlikle hesaplanmamıştı (yani, 2'den büyük mü yoksa 2 den az mı olduğu bile bilinmiyor).
Greg Martin

@GregMartin Bu doğru olsa da, şu anda sahip olduğumuz en iyi yaklaşım.
Mego

5, iki asal
çiftte

Yanıtlar:


25

Python 3 , 78 77 75 70 68 62 bayt

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 x baytlık golf oynadığı ve 4 tane daha yol açtığı için @xnor'a teşekkürler !

Çevrimiçi deneyin!

Arka fon

Hatırlatma; Wilson teoremi devletler tüm tamsayılar için k> 1 ,

burada bir ≡ b (mod d) bu araçlar A - B bölünemeyen bir d , yani, bir ve b bölünmesiyle aynı kalıntı olması d .

In Double-, hiper-, Alt ve Süper faktöriyellerin Wilson teoremleri , yazarlar bu cevabı inşaa olan çift faktöriyellerinin için genellemeler kanıtlamak. Çift faktörlü bir tamsayıdır ve k ≥ 0 ile tanımlanır

Yukarıda belirtilen makalenin 4. Teoremi aşağıdakileri ifade eder.

Dördüncü iktidara eşlerin her iki tarafını yükselterek,

Tüm garip astarlar için s . 1'den beri ! = 1 , eşdeğerlik de p = 2 için geçerlidir .

Şimdi, Wilson’un teoremine aynısını yapmak

Dan beri

onu takip ediyor

p her ne zaman asaldır.

Şimdi, k garip, pozitif, bileşik bir tamsayı olsun. Tanım olarak, a, b> 1 tamsayıları vardır , öyle ki k = ab .

Yana k garip, yani vardır bir ve b . Böylece, her ikisi de 1, 3,…, k - 2 dizisinde meydana gelir ve

nerede | bölünebilirliği belirtir.

Özetle, tüm tuhaf tamsayılar için k> 1

burada p (k) = 1 , k asal ise , p (k) = 0 , k kompozit ise.

Nasıl çalışır

F işlevi tek bir argümanla çağrıldığında, k , m ve j , 3 , 1 ve 0 olarak başlatılır .

Not ((k - 2) !!) 4 = 1 !! 4 = 1 = m . Aslında, m = ((k - 2) !!) 4 eşitliği her zaman tutacaktır. j bir şamandıradır ve daima ((k - 4) !!) % 4 (k - 2) / (k - 2) 'ye eşit olacaktır .

K <n iken , doğru argüman anddeğerlendirilecektir. Yana j = ((k - 4) !!) 4 % (k - 2) / (k - 2) Birinci fıkrada kanıtlanmış olarak, j = 1 / (k - 2) eğer k - 2 asal ve bir j = 0 değilse Benzer şekilde, bu yana m% k = ((k - 2) !!) 4 eşittir 1 ise k asal ve 0 , değilse -m% k = k 1 - eğer k asal ve -m% k = 0 değilse. Bu nedenle, -m%k*j*2/kdeğerlendirilen 2 (k - 1) / (k (k - 2)) = ((k - 2) + k) / (k (k - 2)) = 1 / k + 1 / (K - 2) eğer çift (k - 2, k)ikiz astarlardan ve eğer değilse 0'dan oluşur .

Yukarıdakileri hesapladıktan sonra sonucu özyinelemeli çağrının dönüş değerine ekleriz f(n,k+2,m*k**4,m%k/k). k tarafından artırılır alır 2 sadece tek değerler alır, böylece ‡ † biz çok kez m ile k 4 yana mk 4 = ((k - 2) !!) 4 k 4 = (k !!) 4 , ve o anki değerini geçmesi m% k / k - "eski" k bir asal ise 1 / k değerine eşitse , 0 değilse - işlev çağrısına j parametresi olarak .

Son olarak, k , n'ye eşit veya daha büyük olduğunda , f , False döndürür ve özyineleme durur. F (n) ' nin dönüş değeri, tüm 1 / k + 1 / (k - 2)' nin toplamı olacaktır; bu tür (k - 2, k) , bir çift asal çifti ve istenildiği gibi k <n'dir .


sonuçlarını Arkaplan sadece tek tamsayı için paragraf beklemeye. Tamsayılar bile ikiz astar olamayacağından, onları güvenle atlayabiliriz.


Bence ifaden aynı m%k*(j/k+j/(k-2)).
xnor

Evet, işe yarıyor. Teşekkürler!
Dennis


Tuhaf için bu ((k-2)!!)^4 = p(k)modulo güzel gözlem . Argümanınız üzerinde çalışmadım, ama işte geldiğim bir tanesi (özünde aynı olabilir). Sette modulo çalışır , eşitler tam olarak oranların negatifidir. Öyleyse . Wilson'ın Teoremi bize bunu söylüyor . Yana , elimizdeki ve böylece . 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

Güzel! Tek bir fraksiyon olarak toplamı ifade fakat bunun bir kısmını işlem güvenilir j bana gerçekleşmemiştir. Tekrar teşekkürler! Kanıtın, kağıttan çok daha basit.
Dennis

7

Jöle , 15 14 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

’Æ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 bayt (@Dennis'den biraz yardım alarak)

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

Çevrimiçi deneyin!

Önceki cevabımı geliştirmeye çalışırken, tamamen farklı bir algoritma düşündüm ve bu biraz daha kısa sürdü. Farklı bir teknik kullanan bir cevap için standart olduğu gibi, bunun için farklı bir yazı kullanıyorum.

Dennis yerine düşündüren _/2+$$Ðḟile Iċ¥Ðf2; İkili filtre olasılığını tamamen unutmuştum. Dolayısıyla, bu algoritma artık Dennis'in cevabının kullandığı ifadeyle bağdaştırılıyor.

açıklama

’Æ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+$$Ðḟolabilir Iċ¥Ðf2.
Dennis

4

Brachylog , 17 bayt

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

Çevrimiçi deneyin!

Bu Brachylog'un yepyeni versiyonu, parlak bir kod sayfası!

açıklama

{            }ᶠ        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 bayt

liqZqtd2=)t2+h/s

Çevrimiçi deneyin!

13Bir örnek olarak girişi düşünün .

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

Mathematica, 48 47 bayt

1 byte tasarruf ettiğin için JungHwan Min'e teşekkürler!

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

Adsız fonksiyon girdi olarak pozitif bir tamsayı alarak ve kesin bir kesir döndürerek; örneğin, If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]~Sum~{i,#-1}&[10]döner 92/105.

If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]hem olmadığını testler ive i-2böylece ve eğer onların tersinin toplamına dönen, asal 0değilse. ~Sum~{i,#-1}&daha sonra bu katkıların toplamını igirdiden daha düşük olan tüm değerler için döndürür .

Önceki gönderi:

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

Şimdi bu sadece ürkütücü. Pes ediyorum. Leg
LegionMammal978 1

"Kesir fraksiyonunun" Mathematica anlamına geldiğini merak ettim :)
Greg Martin

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

Bir N@kodun önüne iki bayt ekleyerek rasgele bir hassasiyet numarası alabilir .
JungHwan Min

Durumun güzel golf! NOndalık bir yaklaşımın gerçek sayıya döndürüldüğü doğrudur ; Ancak, 6 sig incir veya daha fazla göstermesi için fazladan bayt gerekir ve kaç incir gösteriliyorsa gösterilsin de, yine de kesirden daha az doğrudur.
Greg Martin,

2

Oktav, 45 bayt

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

Açıklama:

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  

Çevrimiçi Deneyin!


2

JavaScript (ES6), 67 66 bayt

@Arnauld sayesinde 1 bayt kaydedildi

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

Varsayılan olarak izin verilenfalse test durumu için çıktılar .2

Test snippet'i


Sanırım 1/n+++1/++nbir bayt kurtarıyor.
Arnauld

@Arnauld Teşekkürler. Nedense +++bunun her zaman hata atmadığını bilmiyordum ...
ETHproductions


1

Jöle , 19 bayt

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

Çevrimiçi deneyin!

Bunun iyileştirilebilir olduğuna dair bir hislerim var, ama nasıl olduğunu hemen göremiyorum.

açıklama

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

µHer bir girdi olarak önce bir çıkış alma ile birlikte bağlantı bütün bu bölümler boru tarzı.



1

Perl 6 , 59 51 bayt

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

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

-2..* Z ^$_liste -2, -1, 0, 1, ...ile sonsuz listeyi fermuarlar 0, 1, ... $_-1( $_fonksiyonun argümanı olur) (-2, 0), (-1, 1), (0, 2), ..., ($_-3, $_-1). (Açıkçası, bu sayılardan 3’den daha küçük olanların hiçbiri asal bir çiftte olamaz, ancak 3..* Z 5..^$_birkaç bayt daha uzun olur ve fazladan sayılardan hiçbiri asıl değildir).

grepSeçer yalnızca tüm (olduğunu, her ikisi) sayıların asal olan bu çift, ve flatrakamlardan oluşan bir düz liste halinde derecede düzeltilir onları.

«/»bölmeli hiper-operatör; sağdaki ve 1soldaki liste ile, asal çiftlerin listesini karşılık gelenlere dönüştürür ve bunlar daha sonra toplanır sum.


1

Clojure, 147 bayt

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

Ve Clojure her zamanki gibi en son ölüyor.

Ungolfed:

; 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 yardımcı programları, 86 85 bayt

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

Çevrimiçi deneyin!

Büyük bir aritmetik ifade oluşturur ve sonra onu bc -ldeğerlendirmek için besler .

Düzenleme: Yanlışlıkla eski bir sürümde $ (...) çifti içinde yuvalanmış komut yerine koyma; Bir bayt kaydetmek için backticks olarak değiştirildi.


0

APL NARS, 216 bayt, 108 karakter

  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

Bu, istek astarlarının 1..arg'ındaki alt listesini bulmak için "Crivello di Eratostene" kullanır. Ölçek:

  z¨2 6 10 13 100 620
0 0.5333333333 0.8761904762 0.8761904762 1.330990366 1.499970603 
  z 100000
1.672799585
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.