La plupart d'entre nous savent ...
que tous les nombres premiers p>3
sont de la forme
Mais combien sont les Plus Primes ( 6n+1
) et combien sont les Minus Primes ( 6n-1
) dans une certaine plage?
Le défi
Pour un nombre entier k>5
, compter combien primes<=k
sont PlusPrimes et combien sont MinusPrimes .
Exemples
car k=100
nous avons
[5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89]
12 MinusPrimes
et
[7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97]
11 PlusPrimes
car k=149
nous avons
[5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89, 101, 107, 113, 131, 137, 149]
18 MinusPrimes
et
[7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97, 103, 109, 127, 139]
15 PlusPrimes
Règles
Votre code doit générer 2 entiers : un pour le MinusPrimes et un pour le PlusPrimes dans l'ordre de votre choix (veuillez préciser lequel est lequel).
C'est code-golf : la réponse la plus courte en octets gagne!
Cas de test
Entrée -> Sortie [ MinusPrimes , PlusPrimes ]
6->[1,0]
7->[1,1]
86->[11,10]
986->[86,78]
5252->[351,344]
100000->[4806,4784]
4000000->[141696, 141448]
0%6
multiple de 6,1%6
impossible à déterminer,2%6
multiple de 2,3%6
multiple de 3,4%6
multiple de 2 et5%6
impossible à déterminer.Réponses:
05AB1E ,
10 à9 octetsEnregistré 1 octet grâce à Erik the Outgolfer
Sorties en tant que
[PlusPrimes, MinusPrimes]
Essayez-le en ligne! ou en tant que suite de tests
Explication
la source
MATL , 10 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Python 2 , 77 octets
-2 octets grâce à Neil
Essayez-le en ligne!
Solution précédente,
838179 octets-1 octet grâce à Mr. Xcoder
-2 octets grâce à Halvard Hummel
Essayez-le en ligne!
Les deux sorties en tant que [MinusPrimes, PlusPrimes]
la source
[]
s.Gelée , 7 octets
Plus, puis moins.
Essayez-le en ligne!
Comment ça marche
la source
Mathematica, 51 octets
Essayez-le en ligne!
@ ngenisis a joué au golf, économisant 4 octets
Mathematica, 47 octets
la source
Mod
peut aussi être infixe, et si vous nommez le premier arguments
, utilisez simplement un argument nommé:sPrime~Array~PrimePi@s~Mod~6~Count~#&/@{5,1}
Japt ,
151311 octetsL'ordre de sortie est
[+,-]
.Essaye-le
ë
à mon attention la méthode de tableaux précédemment inconnue de moi .Explication
Entrée implicite d'entier
U
.Générez un tableau d'entiers (
õ
) de 1 àU
et vérifiez si chacun d'eux est une prime (j
), ce qui donne un tableau de booléens.Partitionnez le tableau en sous-tableaux de longueur 6.
Transposer (
y
) et additionner les colonnes.Récupère chaque 4ème élément du tableau et les affiche implicitement.
Original,
19171615 octetsEssaye-le
la source
J , 23 octets
Essayez-le en ligne!
la source
Retina ,
5351 octetsEssayez-le en ligne! Explication:
Convertir en unaire.
Comptez de 1 à
n
.Supprimer les nombres inférieurs à 4.
Supprimer des nombres composés.
Prenez le reste modulo 6.
Imprimer le nombre de nombres avec un reste entre 3 et 5.
Imprimer le nombre de nombres avec un reste de 1.
la source
Ruby,
61 ans60 octets(52 octets + 8 pour le
-rprimes
drapeau)Retourne un tableau de la forme [plus nombres premiers, moins nombres premiers].
Sauvé 1 octet grâce à GB!
Essayez-le en ligne.
la source
count
sur la plage sans l'opérateur splat (enregistrer 1 octet).Perl 6 , 42 octets
Sauvegardé 1 octet en supprimant un espace inutile ...
Sauvegardé 2 octets en réorganisant l'
map
appel - grâce à @Joshua.Sauvegardé 3 octets car
.round
égal.round: 1
.En réalité, le complexe exponentiel est cool mais très coûteux en caractères. Sauvegardé 10 octets juste en l'abandonnant ...
Essayez-le en ligne!
C'était la version avec le complexe exponentiel. (Je l'aime trop pour le supprimer.) La nouvelle version fonctionne exactement de la même manière, seule l'exponentielle complexe est remplacée par l'opérateur ternaire beaucoup plus court.
Essayez-le en ligne!
La sortie est un nombre complexe
(PlusPrimes) + (MinusPrimes)i
. J'espère que ce n'est pas trop contre les règles.Explanation: C'est une fonction qui prend un argument entier. Nous parcourons tous les entiers de 5 à l'argument (
(5..$_)
). Pour chacun de ceux-ci, nous évaluons.is-prime
(ceci est appelé$_
, l'argument du bloc mappé), le multiplions (s'il est numérotéTrue == 1, False == 0
) avec une exponentielle complexe conçue pour êtreexp(0) = 1
(pour$_%6 = 1
) ouexp(iπ/2) = i
(pour$_%6 = 5
), et finalement l'arrondir à l'entier le plus proche. En les résumant avec[+]
donne le résultat.Enfin, c’est vraiment efficace, donc je ne suis pas sûr que TIO n’expérimentera pas une temporisation avant d’obtenir votre sortie pour des nombres plus élevés (pour 1e5, il faut 26 secondes sur ma machine et TIO a tendance à être un peu plus lent).
la source
map
ougrep
peut parfois vous coûter quelques caractères. Cela économise 2 caractères:{[+] map {.is-prime*exp(π*($_%6-1)i/8).round: 1},5..$_}
En fait , 21 octets
Essayez-le en ligne!
Envoie d'abord les PlusPrimes, puis les MinusPrimes
Explication:
la source
Empilé , 37 octets
Essayez-le en ligne!
Plutôt lent, teste la primalité pour chaque K < N . Fonctionne comme mon J réponse.
la source
MATLAB 2017a, 29 octets
Explication:
primes(k)
obtient tous les nombres premiers jusqu'à et y compris k.mod(primes(k),6)'
prend le module 6 de tous les nombres premiers et le transpose pour que la somme corresponde à la dimension correcte.==[5,1]
définit tous les cinq (minusPrimes) sur 1 dans la première colonne et tous les un (plusPrimes) sur 1 dans la deuxième colonne.sum()
résume chaque colonne.Cette sortie
[minusPrime, plusPrime]
la source
Japt ,
1816 octets-2 octets grâce à @Oliver
Essayez-le en ligne!
Sorties au format
[PlusPrimes, MinusPrimes]
.la source
[5,1]
pour obtenir les comptes et vous y êtes arrivé en premier.f
ilter et une ficelle; J'ai utilisé la fonction de mappage deõ
et un tableau. En outre, j'ai eu l'[5,1]
idée d'une autre réponse.5â
pour obtenir[1,5]
C #,
202179174 octets-23 octets grâce à M. Xcoder
-5 octets grâce à Cyoce
Fonction qui retourne un tableau de longueur 2,
[MinusPrimes, PlusPrimes]
exécutée par un appela(n)
.Code correctement formaté sur Essayez-le en ligne: ici
la source
public int[]a(int n){int[]r=new int[2];for(int i=5;i<=n;i++)if(i%2*b(i)>0)if(i%6<5)r[1]++;else++r[0];return r;}public int b(int n){for(int i=3;i<=Math.Sqrt(n)+1;i+=2)if(n%i<1)return 0;return 1;}
public int[]a(int n){int[]r=new int[2];for(int i=5;i<=n;i++)if(i%2*b(i)>0)if(i%6<5)r[1]++;else++r[0];return r;}public int b(int n){for(int i=3;i-2<Math.Sqrt(n);i+=2)if(n%i<1)return 0;return 1;}
Haskell ,
81 à69 octetsEssayez-le en ligne!
La première solution était:
Mais j'ai lu la réponse de w0lf dans Ruby ...
la source
Pyth , 15 octets
Suite de tests.
Pyth , 16 octets
Suite de tests.
Comment?
Explication # 1
Explication # 2
Alternatives:
la source
Jelly ,
12 1110 octetsMerci à @cairdcoinheringaahing pour quelques conseils en discussion. Merci à @Dennis d' avoir enregistré un octet dans le chat.
Essayez-le en ligne!
Gelée , 11 octets
Essayez-le en ligne!
Gelée , 11 octets
Essayez-le en ligne!
Comment cela marche-t-il?
Explication # 1
Explication # 2
Explication # 3
la source
Java 8,
141140138106101100969481 octetsRenvoie un-tableau d'entiers à deux valeurs, dans l' ordre inverse par rapport à la description de défi
[plusPrime, minusPrime]
.Port de la réponse C # de @Xynos , après avoir joué au golf
394042 octets.Énorme aide de @ Nevay pour un autre énorme -55 octets.
Explication:
Essayez ici. (Le cas de test final de
4000000
dépasse légèrement la limite de temps de 60 secondes.)la source
n->{int r[]={0,0},i=4,j,c;for(;i++<n;){for(j=c=1;j*j<i;)c=i%(j+=2)<1?0:c;if(i%2*c>0)r[i%6%5]++;}return r;}
n->{int r[]={0,0},i=4,j,c;for(;i++<n;r[i%6%5%2]-=-i%2*c>>-1)for(j=c=1;j*j<i;)c|=i%(j+=2)-1;return r;}
n->{int r[]={0,0},i=4,j,c;for(;i++<n;r[i%6%5%2]+=i&c)for(j=c=1;j*j++<i;)c&=-i%++j>>-1;return r;}
(-1 grâce à vousj++,++j
)n->{int r[]={0,0},i=4,j,c;for(;i++<n;r[i%6/4]+=i&c)for(j=c=1;j*j++<i;)c&=-i%++j>>-1;return r;}
([plusPrime, minusPrime]
).n->{int r[]={0,0},c;for(;n-->4;r[n%6/4]+=c)for(c=n;c>1;)c=c-1&~n%c>>-1;return r;}
JavaScript (ES6),
8382806866 octetsIl s'est avéré qu'une solution totalement récursive était beaucoup plus courte que la cartographie d'un tableau!
L'ordre de sortie est
[-,+]
. Craps avec une erreur de débordement quelque part autour de 3490.L'essayer
la source
CJam , 19 octets
Programme qui prend l’entrée de STDIN et produit les deux nombres séparés par une nouvelle ligne par STDOUT.
Essayez-le en ligne!
Explication
la source
Numéros R + ,
66605840 octets-16 octets grâce à Jarko Dubbeldam! J'ai ensuite joué au golf deux autres octets.
Imprime
PlusPrimes MinusPrimes
sur stdout; lit de stdin.table
tabule le nombre de chaque occurrence des valeurs dans son vecteur d'entrée, par ordre croissant de valeur. Par conséquent, puisqu'il n'y a que deux valeurs, à savoir1
et5
(mod 6), il s'agit exactement de la fonction dont nous avons besoinnumbers::Primes
, qui renvoie tous les nombres premiers entre4
et l'entrée.Essayez-le en ligne!
Base R ,
9791898665 octetsun tas d'octets enregistrés par Jarko ici aussi
Ceci est presque identique à ce qui est décrit ci-dessus, sauf qu'il calcule tous les nombres premiers en base R plutôt que d'utiliser un package et qu'il renvoie par la sortie de la fonction plutôt que de l'imprimer. Vous pouvez voir dans la sortie qu'elle renvoie une table avec des noms
1
et5
, avec les nombres ci-dessous.Essayez-le en ligne!
la source
all(x%%2:x^.5>0)
, tout ce qui n'est pas nul est déjà vrai, alors çaall(x%%2:x^.5)
marche aussi4
ce que nous pouvons nous débarrasser de la,>4
car nous n'y aurons2
plus de prime comme prime, alors cela passe à 40 octets à la place.Paris / GP , 41 octets
Essayez-le en ligne!
la source
JavaScript (SpiderMonkey) ,
151,140, 131 octetsEssayez-le en ligne!
Merci à Shaggy d’avoir aidé à résoudre un bug et à jouer au golf.
Explication:
la source
17,15
for 149 (devrait être18,15
). Vous devez augmenter la taille de votre tableau de 1: TIO . Incidemment, il ne s’agit que de la «vanille» ES6, sans rien de spécifique à SpiderMonkey. En outre, vous pouvez utiliser Stack Snippets for JS plutôt que TIO. Et, vous avez beaucoup d'espaces que vous pouvez supprimer.