Le postulat de Bertrand indique que pour chaque entier n ≥ 1, il y a au moins un premier p tel que n <p ≤ 2n . Pour vérifier ce théorème pour n <4000 nous n'avons pas à vérifier 4000 cas: L' astuce de Landau dit qu'il suffit de vérifier que
2, 3, 5, 7, 13, 23, 43, 83, 163, 317, 631, 1259, 2503, 5003
sont tous premiers. Parce que chacun de ces nombres est inférieur au double de son prédécesseur, chaque intervalle {y: n <y ≤ 2n} contient au moins un de ces nombres premiers.
Cette séquence de nombres sont les Bertrand Primes (OEIS A006992) et ils sont définis comme suit:
a(1) = 2
a(n) = largest prime below 2a(n-1)
Défi
Implémentez cette séquence. Vous pouvez écrire
- une fonction ou un programme qui, étant donné n, renvoie a (n) (0 ou 1 indexé),
- une fonction ou un programme qui, étant donné n, renvoie les n premières entrées (ou n-1 ou n + 1 ) de cette séquence,
- une liste ou un flux infini ou un générateur ou équivalent similaire dans votre jauge.
Fx.ØØ
est si proche ... Fonctionne pour tout ce qui précèden > 2
.$F·ÅPθ
pour le même nombre d'octets.Haskell , 50 octets
Essayez-le en ligne!
Génère une liste infinie.
Haskell , 40 octets?
Essayez-le en ligne!
Cela fonctionne si les nombres premiers de Bertrand ne contiennent aucun pseudoprime de Fermat pour 2 .
la source
Gelée , 6 octets
Essayez-le en ligne!
0 indexé.
Explication
la source
MATL , 9 octets
Entrées n , sorties a ( n ), 1 indexées.
Essayez-le en ligne!
Explication
la source
Stax , 10 octets
Exécuter des cas de test
Ce problème a révélé un bogue dans l'implémentation de stax
:p
, qui est une instruction qui obtient le plus grand nombre inférieur à son entrée. Si cela fonctionnait correctement, il y aurait une solution de5 à6 octets.Mais hélas non, et il n'y en a pas.En tant que créateur de la langue, je vais le réparer, mais il semble plutôt bon marché de le réparer et de l'utiliser après la publication du problème.Quoi qu'il en soit, voici la représentation ascii correspondante du programme ci-dessus.
Il s'agit d'une implémentation relativement simple de l'énoncé du problème. La seule chose éventuellement intéressante à ce sujet est l'utilisation du
gs
formulaire générateur. Les générateurs sont une famille de constructions qui combinent une condition initiale, une transformation et un filtre pour produire une ou plusieurs valeurs satisfaisantes. Dans ce cas, il est utilisé à la place de l':p
instruction cassée .Modifier: voici la solution à 6 octets, mais elle nécessite une correction de bogue qui n'a été appliquée qu'après la publication de ce défi.
la source
Python 2 , 63 octets
Essayez-le en ligne!
Imprime pour toujours.
Utilise le générateur principal de théorème de Wilson, même si la génération de nombres premiers vers l'avant est maladroite pour ce problème. Suit le plus grand nombre premier observé
r
et la limite de doublementm
.Deux octets sont enregistrés en faisant
P*=k
plutôt queP*=k*k
d'habitude, car le seul effet est de prétendre que 4 est premier, et la séquence de doublage le manque.la source
CJam (15 octets)
Démo en ligne . Notez qu'il s'agit d'un index 0.
Une approche plus efficace serait de rechercher en arrière, mais cela nécessite un caractère de plus car il ne peut pas utiliser implicite
,
(plage):la source
Japt ,
16141312 octetsDeux solutions pour le prix d'une, toutes deux indexées.
Nième terme
Enfin, un défi que je peux écrire une solution de travail à utiliser
F.g()
.Essayez-le
Premiers N termes
Essayez-le
la source
Pari / GP , 34 octets
Essayez-le en ligne!
la source
Python 2 , 64 octets
Essayez-le en ligne! Imprime la séquence indéfiniment
la source
Haskell , 58 octets
Essayez-le en ligne!
la source
Python 2 , 68 octets
Imprime la séquence indéfiniment (vous devez cliquer sur "Exécuter" la deuxième fois pour arrêter l'exécution).
Essayez-le en ligne!
Python 3 , 90 octets
Renvoie le n ème terme.
Essayez-le en ligne!
la source
C (gcc) ,
9787868079 octetsP
dans la boucle principale.printf
appel.i
-ième entrée de séquence (indexée 0) au lieu de produire un flux sans fin.Essayez-le en ligne!
la source
Attaché , 38 octets
Essayez-le en ligne!
Basé sur 0; renvoie le
n
th Bertrand prime.Il n'y a actuellement aucune fonction intégrée pour trouver les nombres premiers précédents / suivants, donc j'utilise la fonction
Series
intégrée pour calculer tous les nombres premiers jusqu'à2*$[_-1]
. Cette dernière expression utilise la récursivité implicite (liée à$
) pour définir facilement la relation de récurrence. La condition if est utilisée pour déterminer une condition de base.la source
Perl 6 , 35 octets
Essayez-le en ligne!
Cette expression est une liste infinie de nombres premiers de Bertrand.
la source
Rétine , 39 octets
Essayez-le en ligne! Explication:
Commencez par 1.
Répétez la boucle en utilisant l'entrée comme nombre de boucles.
Doublez la valeur.
Trouvez le plus haut prime inférieur à la valeur.
Imprimez le.
la source
Ruby , 51 + 7 (-rprime) = 58 octets
Essayez-le en ligne!
Un lamba acceptant
n
et renvoyant lenth
prime de Bertrand, indexé 0. Il n'y a pas grand-chose ici, mais permettez-moi de le dissoudre quand même:Ruby , 48 + 7 = 55 octets
Essayez-le en ligne!
Pour le plaisir, voici une solution en boucle infinie. Il imprime au fur et à mesure et nécessite une interruption. En fonction de l'heure exacte à laquelle vous interrompez, vous pouvez voir ou non la sortie. Non golfé:
la source
APL (Dyalog Extended) , 12 octets
Prend l'entrée de l'utilisateur comme N, retourne le Nième élément de la séquence (indexé 0).
Essayez-le en ligne!
Explication:
la source
R , 87 octets
n
Résultats donnésa(n)
Essayez-le en ligne!
Je travaille toujours sur "Étant donné n sortie a (1), a (2) ... a (n)". Je pensais que je pouvais juste modifier légèrement ce code, mais cela semble plus difficile que cela.
la source