Un écart premier est la différence entre deux nombres premiers consécutifs. Plus précisément, si p et q sont des nombres premiers avec p < q et p +1, p +2, ..., q −1 ne sont pas des nombres premiers, les nombres premiers p et q définissent un écart de n = q - p . L'écart est dit être commencé par p et avoir une longueur n .
On sait qu'il existe des écarts premiers arbitrairement importants. C'est-à-dire, étant donné n, il existe un intervalle principal de longueur n ou plus. Cependant, un intervalle principal de longueur exactement n peut ne pas exister (mais un plus grand le sera).
Le défi
Étant donné un entier positif n
, sortez le premier nombre premier qui commence un intervalle de longueur n
ou plus.
Par exemple, pour l'entrée, 4
la sortie devrait être 7
, car 7 et 11 sont les premiers nombres premiers consécutifs qui diffèrent d'au moins 4 (les écarts précédents sont 1, de 2 à 3; 2, de 3 à 5; et 2, de 5 à 7). Pour la saisie, 3
la réponse doit également être 7
(il n'y a pas de lacunes de longueur 3).
Règles supplémentaires
L'algorithme devrait théoriquement fonctionner pour des valeurs arbitrairement élevées
n
. En pratique, cela est acceptable si le programme est limité par le temps, la mémoire ou la taille du type de données.L'entrée et la sortie peuvent être prises par tout moyen raisonnable .
Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les failles standard sont interdites.
Le code le plus court en octets gagne.
Cas de test
Input -> Output
1 2
2 3
3 7
4 7
6 23
10 113
16 523
17 523
18 523
30 1327
50 19609
100 370261
200 20831323
la source
Réponses:
Gaia , 6 octets
C'est extrêmement inefficace (le
16
cas de test a pris plus d'une heure à calculer sur ma machine).Essayez-le en ligne!
Explication
La séquence semble avoir la propriété a (n) <= 2 ^ n .
la source
Gelée ,
10, 9, 810 octetsEssayez-le en ligne!
Deux octets enregistrés grâce à @Dennis! (puis ajouté à nouveau en raison de bordures)
Explication:
la source
#
comptera à partir de l'entrée ici) Il semble raisonnable de supposer cela mais pour ma part je n'ai aucune idée si c'est une hypothèse valide. EDIT: FYI pour corriger (si nécessaire) le préfixe avec2ð
Mathematica, 30 octets
Essayez-le en ligne!
Mathematica, 35 octets
Essayez-le en ligne!
Mathematica, 77 octets
la source
p
etq
sont premiers ... Le premier code semble invalide, cependant, car il ne monte à 65535 à moins que vous nourrissez explicitement l'argumentMaxIterations
.(For[t=2,NextPrime@t-t<#,t++];t)&
Haskell ,
106 102 93 77 7372 octetsCela génère d'abord une liste infinie de nombres premiers, puis recherche les écarts premiers. La liste principale a été prise d' ici . Il peut probablement être raccourci, mais je n'ai pas encore compris comment :)
Merci à @BruceForte pour -4 octets et @Zgrab pour -1 octet!
Essayez-le en ligne!
la source
zip=<<tail$[...]
enregistre un octet.n
cela s'arrêtera après un temps limité :) (Haskell n'est pas un langage procédural, mais fonctionnel avec une évaluation paresseuse.)Pyth - 14 octets
Il filtre à partir de [1, inf), filtrant par primalité (
P_
) et que le prochain nombre premier filtré à partir de (n, inf), a un différent = = à l'entrée.Suite de tests .
la source
PowerShell ,
979691 octetsEssayez-le en ligne!
Prend l'entrée
$n
, définit$a
et est$b
égal à2
, puis entre dans unefor
boucle infinie . À l'intérieur, nous bouclons jusqu'à$b
ce que nous arrivions au premier prime . Ensuite , nous vérifions si$b-$a
(c. -à l'écart) est-g
reaterthanore
qual à$n
. Si c'est le cas, nous sortons$a
etexit
. Sinon, nous définissons$a
être$b
et incrémenter$b
et commencer notre prochaine recherche.Avertissement: Ceci est lent pour une entrée volumineuse. En fait, il ne peut pas terminer les
50
tests ou plus dans le délai d'expiration des années 60 sur TIO. Tant pis.la source
Husk ,
131110 octetsEssayez-le en ligne!
la source
Mathematica, 39 octets
Version 33 octets (non valide car elle ne monte qu'au 65535th prime)
la source
Python 2 ,
9688 octets- 8 octets Merci à @Maltysen
Essayez-le en ligne!
la source
Perl 6 , 63 octets
Essayez-le en ligne!
la source
Mathematica, 37 octets
Function
avec le premier argumentg
. En commençant par2
, applique la fonction àp=NextPrime
plusieurs reprises aussi longtemps quep@#-#<g&
donneTrue
(l'écart entre le nombre premier actuel et le nombre premier suivant est inférieur àg
).la source
R + gmp, 55 octets
Utilise la fonction nextprime de la bibliothèque gmp
la source
cat(s)
à la fin. L'impression implicite ne fonctionne pas dans les programmes complets.Rubis , 61 octets
Essayez-le en ligne!
la source
C =
141109 octets; C ++, D = 141 octets; C #, Java = 143 octetsAVERTISSEMENT : ALGORITHME DE FAIBLE PERFORMANCE
Ce code n'a pas pu calculer l'écart principal pendant
g(200)
10 minutes. Pourg(100)
, il fallait 10 secondes (version C ++)Version C ++ et D:
Version C # et Java:
Version C, -32 octets grâce à plafondcat:
Différences entre la version C # / Java et C / C ++ / D:
!p(n)
<==>p(n)==0
la source
return 0; return 1
et supprimer l'!
avantp(++n)
d%i==0
et!(d%i)
peut êtred%i<0
. En outre, en utilisant le système de modèle de D'la solution D peut être:T p(T)(T d){for(T i=2;i<=d/2;++i)if(d%i<1)return 0;return 1;}T g(T)(T d){T f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;
. (La suppression des accolades après lefor
etdo
pourrait également s'appliquer au C ++)int p(int d){for(int i=2;i<=d/2;++i)if(!(d%i))return 0;return 1;}int g(int d){int f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;}
<- cela devrait fonctionner pour la version C ++D,
127125122 octetsATTENTION: ALGORITHME DE FAIBLE PERFORMANCE !!
Essayez-le en ligne!
Comment?
HatsuPointerKun à nouveau, mais je vais faire la sorcellerie spécifique D.
T p(T)(T d)
et est plus court que C ++r=d%i++<1||r
, Les manigances spécifiques à D, pourraient fonctionner en C / C ++, mais je ne sais pas.p(++n)
, comme ci-dessus, je ne sais pas si cela fonctionne en C / C ++while(p(++n)){}
, on voit ici pourquoi D est mauvais au golf, on ne peut pas l'utiliser;
comme une déclaration vide.la source
Perl 6 ,
4137 octetsEssayez-le en ligne!
Explication
la source
QBIC , 28 octets
Explication
la source
05AB1E , 9 octets
Essayez-le en ligne ou vérifiez tous les cas de test . (Test Suite ne contient pas les deux derniers cas de test, car TIO arrive à expiration pour ceux-ci.)
Puisque l'autre question est fermée en tant que dupe de celle-ci , je poste également ma réponse ici.
Explication:
la source
Java 8,
9992 octetsEssayez-le en ligne. (Le plus grand cas de test est exclu, car il expire dans TIO.)
Explication:
la source
Tidy , 33 octets
Essayez-le en ligne!
Ou, 28 caractères / 34 octets:
{x:({v:⊟v≤-x}↦primes+2)@0@0}
Je vais expliquer cela en utilisant un équivalent ASCII équivalent:
la source
APL (NARS), 36 caractères, 72 octets
1π est la fonction "prochain premier"; tester:
la source