Étant donné un nombre naturel , renvoyez le -ième nombre cubain premier .
Primes cubains
Un nombre premier cubain est un nombre premier de la forme
où et ou
Détails
- Vous pouvez utiliser une indexation basée sur 0 ou 1, selon ce qui vous convient le mieux.
- Vous pouvez renvoyer le -ième nombre premier en fonction de l'indice ou des premiers nombres premiers dans l'ordre croissant, ou bien vous pouvez renvoyer une liste / un générateur infini qui produit les nombres premiers dans l'ordre croissant.
Cas de test
Les premiers termes sont les suivants:
(#1-13) 7, 13, 19, 37, 61, 109, 127, 193, 271, 331, 397, 433, 547,
(#14-24) 631, 769, 919, 1201, 1453, 1657, 1801, 1951, 2029, 2269, 2437,
(#25-34) 2791, 3169, 3469, 3571, 3889, 4219, 4447, 4801, 5167, 5419,
(#35-43) 6211, 7057, 7351, 8269, 9241, 10093, 10267, 11719, 12097,
(#44-52) 12289, 13267, 13669, 13873, 16651, 18253, 19441, 19927, 20173
Plus de termes peuvent être trouvés sur OEIS: Ils sont divisés en deux séquences, selon que ou : A002407 et A002648
Réponses:
JavaScript (V8) , 54 octets
Un programme complet qui imprime pour toujours les nombres premiers cubains.
Essayez-le en ligne!
NB: Sauf si vous avez du papier infini dans votre imprimante, n'essayez pas de l'exécuter dans la console de votre navigateur , où cela
print()
peut avoir une signification différente.JavaScript (ES6),
63 61 6059 octetsRenvoie la du premier cuban, 1-indexés.n
Essayez-le en ligne!
Comment?
Ceci est basé sur le fait que les nombres premiers cubains sont des nombres premiers de la forme:
La formule ci-dessus peut s'écrire:
ou pour tout :y>0
qui est pour et respectivement.x3−y3x−y x=y+1 x=y+2
la source
05AB1E ,
16129 octetsGénère une liste infinie.
4 octets enregistrés avec la formule du port d'Arnaulds de Kevin Cruijssen .
Enregistré encore 3 octets grâce à Grimy
Essayez-le en ligne!
Explication
la source
N^2+3
sur la pile " devrait l'être3*N^2
. Aussi, pourquoi au)
lieu de¯
? Parce que c'est plus facile à taper? Et pour une raison quelconque, j'ai l'impression que leNnN‚3*¬sO‚
peut être 1 octet plus court, mais je ne le vois pas. Une légère alternative à octets égaux estNn3*DN3*+‚
. Mais je ne vois probablement que des choses qui ne sont pas là ..;) Belle réponse, donc +1 de ma part.R ,
7573 octetsEssayez-le en ligne!
-2 octets en remarquant que je peux supprimer les crochets si j'utilise à la
*
place de&
(priorité différente).Produit le
n
premier cubain (indexé 1).Il utilise le fait (donné dans OEIS) que les nombres premiers cubains sont de la formep = 1 + 3 n2 ou 4 p = 1 + 3 n2 pour certains n , c'est-à-dire n = a ⋅ p - 13----√ est un entier poura = 1 oua = 4 .
L'astuce est qu'aucun nombre premier ne peut être de la forme2 p = 1 + 3 n2 ou 3 p = 1 + 3 n2 (*), nous pouvons donc économiser 2 octets en vérifiant la formule pour a ∈ { 1 , 2 , 3 , 4 } ( a ∈ { 1 , 4 } (
1:4
) au lieu d'c(1,4)
).Version légèrement non golfée du code:
(*) Aucun nombre premier ne peut être de la forme3 p = 1 + 3 n2 , sinon 1 = 3 ( p - n2) serait divisible par 3 .
Aucun nombre premier autre quep = 2 (qui n'est pas un nombre premier cubain) ne peut avoir la forme 2 p = 1 + 3 n2 : n devrait être impair, c'est-à-dire n = 2 k + 1 . L'expansion donne 2 p = 4 + 12 k ( k + 1 ) , donc p = 2 + 6 k ( k + 1 ) et p serait pair.
la source
Wolfram Language (Mathematica) ,
666556 octetsEssayez-le en ligne!
J42161217 -1 en utilisant
⌊ ⌋
au lieu deFloor[ ]
attinat
⌊3#/4#⌋
au lieu de⌊3#^2/4⌋
For[n=i=0,i<#,PrimeQ@f@++n&&i++]
au lieu den=2;i=#;While[i>0,i-=Boole@PrimeQ@f@++n]
la source
Java 8,
94888684 octets-6 octets en utilisant le prime-checker Java de @SaraJ , alors assurez-vous de lui donner un vote positif!
-2 octets grâce à @ OlivierGrégoire . Étant donné que le premier nombre que nous vérifions est
7
, nous pouvons supprimer la fin%n
du premier vérificateur de Sara, qui doit mettre fin à la bouclen=1
.-2 octets grâce à @ OlivierGrégoire en portant la réponse de @Arnauld .
Sorties indéfiniment délimitées par l'espace.
Essayez-le en ligne.
Explication (de l'ancienne version de 86 octets): TODO: Mettre à jour l'explication
la source
v->{for(int n=7,i=3,p,x,d,r=0;;i+=++r%2*3,n+=i,System.out.print(x>1?x+" ":""))for(x=n,d=1;++d<n;x=x%d<1?0:n);}
peut-être que quelqu'un peut l'utiliser pour jouer au golf? Je ne pouvais pas.,p
et en le changeanti+=++r%2*3,n+=i
enn+=i+=++r%2*3
, mais je finirai quand même à 106 octets. Utilisation de Java 11 deString#repeat
Premier-regex est de 105 octets:v->{for(int n=7,i=3,r=0;;n+=i+=++r%2*3)if(!"x".repeat(n).matches(".?|(..+?)\\1+"))System.out.println(n);}
.%n
n'est pas requise, n'est-ce pas?Wolfram Language (Mathematica) , 83 octets
Essayez-le en ligne!
la source
Gelée , 12 octets
Essayez-le en ligne!
Basé sur la méthode de @ Arnauld . Prend n sur stdin et renvoie autant de nombres premiers cubains.
la source
Wolfram Language (Mathematica) , 83 octets
Cette solution produira le nième nombre cubain avec les avantages supplémentaires d'être rapide et de se souvenir de tous les résultats précédents dans le symbole f.
Essayez-le en ligne!
la source
Espace , 180 octets
Lettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté à titre d'explication uniquement.Sorties indéfiniment délimitées par des sauts de ligne.
Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Explication en pseudo-code:
la source
Python 3 ,
110108102 102 octetsMéthode similaire à ma réponse Mathematica (c.-à-d.
isPrime(1+⌊¾n²⌋) else n++
) En utilisant ce vérificateur principal golfé et en renvoyant un générateur infini anonymeEssayez-le en ligne!
count
à 2 +1, de sorte queand x>1
dans le vérificateur principal que j'ai emprunté est inutile -7la source
g=
. Je l'avais seulement inclus en premier lieu car il permettait un visuel rapide sur TIO avecprint(next(g) for i in range(52))
.Japt ,
1413 octetsAdapté de la formule d' Arnauld . 1 indexé.
Essayez-le
1 octet enregistré grâce à EmbodimentOfIgnorance.
la source
(
.Raquette , 124 octets
Essayez-le en ligne!
Renvoie le nième nombre cubain premier, indexé 0.
Utilise la formule de la réponse JavaScript de @ Arnauld
la source
Python 3 , 83 octets
imprime les nombres premiers cubains pour toujours.
Essayez-le en ligne!
la source
Perl 6 ,
3331 octets-2 octets grâce à Grimy
Essayez-le en ligne!
Bloc de code anonyme qui renvoie une liste infinie paresseuse de nombres premiers cubains. Celui-ci utilise la formule d' Arnauld pour générer des nombres premiers cubains possibles, puis
&is-prime
pour les filtrer.Explication:
la source
1+0+|
peut être juste1+|
Pari / GP , 51 octets
En utilisant la formule d'Arnauld .
Essayez-le en ligne!
la source
APL (NARS), 98 caractères, 196 octets
en retrait:
tester:
il est basé sur: si y dans N, un premier cubain possible est
le prochain Cuban Prime possible sera
la source