La constante de Brun est la valeur à laquelle la somme des inverses des paires principales jumelles ( 1/p
et 1/(p+2)
où p
et p+2
sont les deux premiers) converge. C'est approximativement 1.902160583104
.
Étant donné un nombre entier positif N
, approximer la constante de Brun en additionnant les inverses des paires principales jumelles où les deux nombres premiers de la paire sont inférieurs à N
, et produire l'approximation.
Règles
N
sera un entier positif dans la plage représentable de votre langue.- La sortie doit être aussi précise que possible à la valeur réelle, dans les limites de l'implémentation en virgule flottante de votre langue, en ignorant les problèmes potentiels dus aux inexactitudes arithmétiques en virgule flottante. Si votre langage est capable d'arithmétique à précision arbitraire, il doit être au moins aussi précis que l'arithmétique à double précision IEEE 754.
- Alternativement, une fraction exacte peut être sortie dans n'importe quel format cohérent et non ambigu.
- Si un nombre premier apparaît dans plusieurs paires de nombres premiers jumeaux (par exemple
5
, une partie des deux(3, 5)
et(5, 7)
), sa réciproque contribue à la somme à chaque fois.
Cas de test
2 -> 0
6 -> 0.5333333333333333
10 -> 0.8761904761904762
13 -> 0.8761904761904762
100 -> 1.3309903657190867
620 -> 1.4999706034568274
100000 -> 1.67279958482774
Réponses:
Python 3 ,
787775706862 octetsMerci à @xnor d'avoir joué au golf sur
24 octets et ouvert la voie à 4 autres!Essayez-le en ligne!
Contexte
Rappelons que le théorème de Wilson déclare que pour tous les entiers k> 1 ,
où a ≡ b (mod d) signifie que a - b est divisible par d , c'est-à-dire que a et b ont le même résidu lorsqu'ils sont divisés par d .
Dans Wilson Theorems for Double-, Hyper-, Sub- and Super-factorials , les auteurs prouvent des généralisations pour les doubles factorielles, sur lesquelles cette réponse s'appuie. le double factorielle d'un entier k ≥ 0 est définie par
Le théorème 4 du document susmentionné énonce ce qui suit.
En élevant les deux côtés des congruences à la quatrième puissance, nous déduisons que
pour tous les nombres premiers impairs p . Depuis 1 !! = 1 , l'équivalence vaut également pour p = 2 .
Maintenant, faire la même chose avec le théorème de Wilson révèle que
Puisque
il s'ensuit que
n'importe quand p est premier.
Maintenant, soit k un entier composite impair et positif. Par définition, il existe des entiers a, b> 1 tels que k = ab .
Puisque k est impair, a et b aussi . Ainsi, les deux se produisent dans la séquence 1, 3,…, k - 2 et
où | indique la divisibilité.
En résumé, pour tous les entiers impairs k> 1
où p (k) = 1 si k est premier et p (k) = 0 si k est composite.
Comment ça marche
Lorsque la fonction f est appelée avec un seul argument, k , m et j sont initialisés comme 3 , 1 et 0 .
Notez que ((k - 2) !!) 4 = 1 !! 4 = 1 = m . En fait, l'égalité m = ((k - 2) !!) 4 tiendra à tout moment. j est un flottant et sera toujours égal à ((k - 4) !!) 4 % (k - 2) / (k - 2) .
Alors que k <n , le bon argument de
and
sera évalué. Puisque j = ((k - 4) !!) 4 % (k - 2) / (k - 2) , comme prouvé dans le premier paragraphe, j = 1 / (k - 2) si k - 2 est premier et j = 0 sinon. De même, puisque m% k = ((k - 2) !!) 4 est égal à 1 si k est premier et 0 sinon, -m% k = k - 1 si k est premier et -m% k = 0 sinon. Par conséquent, est-m%k*j*2/k
évalué à 2 (k - 1) / (k (k - 2)) = ((k - 2) + k) / (k (k - 2)) = 1 / k + 1 / (k - 2) si la paire (k - 2, k)se compose de nombres premiers jumeaux et à 0 sinon.Après avoir calculé ce qui précède, nous ajoutons le résultat à la valeur de retour de l'appel récursif
f(n,k+2,m*k**4,m%k/k)
. k est incrémenté de 2 donc il ne prend que des valeurs impaires ‡ † , nous multiplions m par k 4 puisque mk 4 = ((k - 2) !!) 4 k 4 = (k !!) 4 , et passons la valeur actuelle m% k / k - qui est égal à 1 / k si le "vieux" k est un nombre premier et 0 sinon - comme paramètre j à l'appel de fonction.Enfin, une fois que k est égal ou supérieur à n , f renvoie False et la récursivité s'arrête. La valeur de retour de f (n) sera la somme de tous les 1 / k + 1 / (k - 2) tels que (k - 2, k) est une paire principale jumelle et k <n , comme souhaité.
‡ Les résultats du paragraphe Contexte ne s'appliquent qu'aux entiers impairs. Étant donné que même les entiers ne peuvent pas être des nombres premiers jumeaux, nous pouvons les ignorer en toute sécurité.
la source
m%k*(j/k+j/(k-2))
.((k-2)!!)^4 = p(k)
modulop
pour bizarrep
. Je n'ai pas travaillé sur votre argument, mais en voici un que j'ai trouvé (qui pourrait être le même en substance). Modulo de travailp
dans l'ensemble{1,2,..,p-1}
, les evens sont exactement les négatifs des cotes. Ainsi,prod(odds) = ± prod(evens)
. Le théorème de Wilson nous le ditprod(all) = - p(k)
. Depuisprod(all) = prod(odds) * prod(evens) = prod(odds) * ± prod(evens)
, nous l'avonsprod(odds)^2 = ±p(k)
et ainsi de suiteprod(odds)^4 = p(k)^2 = p(k)
.Gelée ,
1514 octetsEssayez-le en ligne!
Comment ça marche
la source
Gelée ,
1614 octets (avec un peu d'aide de @Dennis)Essayez-le en ligne!
En essayant d'améliorer ma réponse précédente, j'ai pensé à un algorithme totalement différent, et il est un peu plus court. J'utilise un article différent pour cela, comme c'est la norme ici pour une réponse qui utilise une technique différente.
Dennis suggère de remplacer
_/2+$$Ðḟ
parIċ¥Ðf2
; J'avais complètement oublié la possibilité d'un filtre dyadique. En tant que tel, cet algorithme est désormais lié à celui que la réponse de Dennis a utilisé.Explication
la source
2_/2+$$Ðḟ
peut devenirIċ¥Ðf2
.Brachylog , 17 octets
Essayez-le en ligne!
Ceci est la toute nouvelle version de Brachylog, avec une page de code brillante!
Explication
la source
MATL , 16 octets
Essayez-le en ligne!
Considérez la saisie
13
comme exemple.la source
Mathematica,
4847 octetsMerci à JungHwan Min pour avoir économisé 1 octet!
Fonction sans nom prenant un entier positif en entrée et retournant une fraction exacte; par exemple,
If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]~Sum~{i,#-1}&[10]
renvoie92/105
.If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]
teste si les deuxi
eti-2
sont premiers, renvoyant la somme de leurs inverses si oui et0
si non.~Sum~{i,#-1}&
renvoie ensuite la somme de ces contributions pour toutes les valeurs dei
inférieures à l'entrée.Soumission précédente:
la source
If[PrimeQ/@(i&&(g=i-2)),1/i+1/g,0]~Sum~{i,#-1}&
N@
devant le code.N
renvoie une approximation décimale à un nombre réel; cependant, il nécessite des octets supplémentaires pour afficher plus de 6 figues sig environ, et quel que soit le nombre de figues sig affichées, il est toujours moins précis que la fraction elle-même.Octave, 45 octets
Explication:
Essayez-le en ligne!
la source
JavaScript (ES6),
6766 octets1 octet enregistré grâce à @Arnauld
Sorties
false
pour le cas de test2
, ce qui est autorisé par défaut .Extrait de test
Afficher l'extrait de code
la source
1/n+++1/++n
sauve un octet.+++
ne05AB1E ,
1914 octets (-5 @Emigna)Essayez-le en ligne!
la source
<LDpÏÍDpÏDÌ«zO
pour économiser 5 octets.Gelée , 19 octets
Essayez-le en ligne!
J'ai le sentiment que cela peut être amélioré, mais je ne vois pas immédiatement comment.
Explication
Les
µ
relient toutes ces portions ensemble de style de conduite, chaque prise de la sortie de la précédente en tant qu'entrée.la source
Pyth -
222117 octetsJe pense que le refactoring va aider.
Suite de tests .
la source
Perl 6 ,
5951 octets{sum 1 «/»grep((*-(2&0)).is-prime,^$_).flatmap:{$_-2,$_}}
-2..* Z ^$_
zippe la liste infinie-2, -1, 0, 1, ...
avec la liste0, 1, ... $_-1
($_
étant l'argument de la fonction), produisant la liste(-2, 0), (-1, 1), (0, 2), ..., ($_-3, $_-1)
. (Évidemment, aucun de ces nombres inférieurs à 3 ne peut être dans une paire principale, mais3..* Z 5..^$_
est de quelques octets de plus, et aucun des nombres supplémentaires n'est premier.)Le
grep
sélectionne uniquement les paires où tous les nombres (c'est-à-dire les deux) sont premiers, et lesflat
aplatit en une simple liste de nombres.«/»
est l'hyperopératrice de division; avec la liste à droite et1
à gauche, il transforme la liste des paires principales en leurs inverses, qui est ensuite additionnée parsum
.la source
Clojure, 147 octets
Et Clojure vient en dernier, comme d'habitude.
Non golfé:
la source
Julia 0,4 ,
4846 octetsEssayez-le en ligne!
la source
Utilitaires Bash + GNU,
8685 octetsEssayez-le en ligne!
Construit une grande expression arithmétique puis la nourrit
bc -l
pour l'évaluer.Edit: laissé par erreur dans une paire $ (...) d'une ancienne version avec substitution de commande imbriquée; changé en backticks pour enregistrer un octet.
la source
APL NARS, 216 octets, 108 caractères
cela utiliserait le "Crivello di Eratostene" pour trouver la sous-liste dans 1..arg des nombres premiers de la demande. Tester:
la source