Les amorces sont partout ...
ils se cachent à l'intérieur de Pi
3,141592653 58979 3238 462643 3832 795028841 971693993751
Obtenons ces nombres premiers!
Le défi
Étant donné en entrée un entier n>0
, découvrez combien de nombres premiers sont cachés à l'intérieur des premiers n
chiffres dePi
Exemples
Car n=3
nous devons rechercher des nombres premiers dans [3,1,4]
. Il y a 2 Primes (3,31)
, donc votre code devrait sortir 2
Pour n=10
, les 10 premiers chiffres sont [3,1,4,1,5,9,2,6,5,3]
et votre code devrait sortir 12
car [2, 3, 5, 31, 41, 53, 59, 653, 4159, 14159, 314159, 1592653]
ont été cachés (et trouvés!)
Cas de test
entrée -> sortie
1->1
3->2
13->14
22->28
42->60
50->93
150->197
250->363
500->895
Règles
Votre code doit être en mesure de trouver tous les nombres premiers au moins pourn=50
Oui, vous pouvez coder en dur les 50 premiers chiffres de Pi
si vous aimez le
codage en dur les réponses sont invalides
C'est le code-golf . La réponse la plus courte en octets gagne!
Réponses:
05AB1E ,
108 octets-2 octets grâce à Adnan (
p
vectorise)Essayez-le en ligne! (fonctionnera jusqu'à n = 98413 mais sera très lent même pour n = 50 en raison de la nécessité de tester de si grands nombres pour la primalité - TIO expire à 60 secondes pour n = 50.)
Comment?
la source
<žsþŒÙpO
devrait fonctionner pendant 8 octetsp
vectorise merci!Mathematica, 76 octets
la source
Tr[1^...]
C'est une façon intelligente de trouver la longueur de la liste, sympa!Mathematica,
1049790 octetsHahahaha, j'ai réussi à faire ce travail. Je ne sais pas comment utiliser Mathematica. XD
Contribution:
la source
50 96
L'OP dit que 50 chiffres contiennent 93 nombres premiers, donc la précision de Sympy pourrait être désactivée ..?Python 3 ,
274237207194 194189 octets-37 octets grâce à Wheat Wizard! -14 octets grâce à Mr.Xcoder.
Hardcode les 50 premiers chiffres de pi mais calcule manuellement tout le reste.
Essayez-le en ligne!
la source
l=list("31415...)
devrait enregistrer ~ 40 caractères. Et ce changement vous permet de remplacermap(str,i)
par justei
.len(l)
R,
156123 octetsSolution super intéressante. Travailler sur un bon.
Sauvegardé 33 octets grâce à @Giuseppe.
R (+ nombres et gmp), 198 octets
Solution appropriée. Prend
n
en entrée.Utilise
numbers::dropletPi(50)
pour générer les 50 premières décimales de pi.gsub
supprime le point décimal.substring
prend toutes les sous-chaînes possibles (surprise surprise) de pi jusqu'àn
.La liste retournée est aplatie et converti en
gmp
de »bigz
format. Ce format est requis pour stocker des entiers de longueur 50.unique
prend les valeurs uniques de ce vecteur. Ce résultat est stocké dansx
.Ensuite, nous vérifions la primauté. C'est délicat, car il y a un tas de cas de bord et de désagréments:
Pour high
n
, il y a un0
in pi. Cela conduit à des sous-chaînes avec un zéro non significatif.as.bigz
produitNA
s avec cela, qui doivent être supprimés.Sur une note similaire, la sous-chaîne
"0"
va plantergmp::factorize
, elle doit donc également être supprimée.Pour
n=1
,x = 3
. Ce qui en soi est correct, mais labigz
représentation de3
est itérable, doncsapply
sera confus et rapportera 16 nombres premiers. À cette fin, nous prenons le minimum de la longueur du vecteurx
et la quantité de nombres premiers en lui.gmp::isprime
ne semble pas pouvoir gérer de manière fiable les grands nombres de manière fiable. Donc, à la place, nous utilisonsgmp::factorize
et vérifions que la longueur de la sortie est 1.Donc, dans l'ensemble, nous supprimons
0
etNA
dex
. Nous factorisons toutx
et vérifions la longueur. Nous comptons le nombre d'occurrences de1
et retournons lemin(occurences, length(x))
.la source
cumsum(c(1,1,0,1,1,4,1,0,0,3,0,0,2,7,3,1,0,3,0,0,0,0,0,0,4,1,0,6,0,3,2,0,0,0,0,0,0,4,3,3,6,0,4,8,2,5,3,6,0,5))
place de votre vecteur pour 123 octets :)Gelée ,
5932 octets-27 octets grâce à Erik l'Outgolfer.
Essayez-le en ligne!
Explication
la source