La question
Un nombre premier de Sophie Germain est un nombre premier p tel que 2p + 1 est également un nombre premier. Par exemple, 11 est un nombre premier de Sophie Germain, car 23 est également un nombre premier. Écrivez le programme le plus court pour calculer les nombres premiers de Sophie Germain dans l'ordre croissant
Règles
- Les nombres premiers de Sophie Germain doivent être générés par votre programme, pas à partir d'une source externe.
- Votre programme doit calculer tous les nombres premiers de Sophie Germain inférieurs à 2³²-1
- Vous devez imprimer chaque prime Sophie Germain distincte trouvée par votre programme.
- La personne avec le score le plus bas gagne
Notation
- 2 points par octet de votre code
- -10 si vous pouvez afficher un nombre premier généré par votre programme supérieur à 2³²-1
code-challenge
primes
Meow Mix
la source
la source
Réponses:
CJam
Pour 17 caractères, nous obtenons une énumération complète jusqu'à 2 ^ 32:
Pour 4 caractères de plus, nous obtenons une plage juste assez large pour inclure un SG prime supérieur à 2 ^ 32:
depuis 4294967681 = 2 ^ 32 + 385 <2 ^ 32 + 400.
Bien sûr, nous pourrions également étendre la gamme gratuitement
la source
I,
traiteI
comme un entier 32 bits signé, donc la valeur maximale deI
est2 ** 31 - 1
.Pyth, 19 octets * 2 - 10 = 28
Notez que le compilateur / exécuteur en ligne n'affiche pas de sortie car il s'agit d'une boucle infinie.
Expliqué:
la source
PZ
ne renvoie pas de valeur véridique ou fausse. Il renvoie la factorisation principale deZ
. Le test de prime est!tPZ
, qui vérifie si la factorisation principale ne contient qu'un seul facteur.!tP
erreurs0
et1
être premier cependant, puisque leur factorisation première ne contient qu'un seul facteur. La solution facile consiste à tout remplacerZ
parK
et à attribuerK2
au début.K1
place deK2
, et échangez le si et l'incrément. De cette façon, vous pouvez supprimer le fichier)
. Et+1*K2
c'est la même chose quehyK
.Pyth - 2 * 16 octets - 10 = 22
Utilise la méthode habituelle de vérification de prime en Pyth avec le
!tP
et l'applique à la fois au nombre et à son nombre sûr, avec une petite astuce pour vérifier les deux à la fois. Va jusqu'à10^10
, donc je vais pour le bonus.Explication à venir.Essayez moins de 1000 en ligne .
la source
la source
CJam, 34 (2 * 22 - 10)
Imprime tous les nombres premiers de Sophie Germain sous
12 ** 9
, ce qui inclut4294967681 > 2 ** 32
.J'estime que cela prendra environ 8 heures sur ma machine. Je vais l'exécuter ce soir.
la source
Haskell, 2 * 54-10 = 98
132i
est un chèque de choix.p
prend tous les nombresn
où les deuxn
et2*x+1
sont premiers.p
est une liste infinie.Edit: meilleure façon de vérifier si
2*n+1
est premier.la source
Julia, 2 * 49 - 10 = 88
Les imprime sous forme de liste,
[2,3,5,11,...]
. Si ce format, en utilisant laprimes
fonction ou en attendant que tout le calcul soit fait pour imprimer ne soit pas acceptable, cela les imprime un par ligne pendant son exécution.C'est un peu plus long, 52 caractères. Les deux calculent tous les nombres premiers de Sophie Germain jusqu'à
2^33
, ils devraient donc obtenir la remise de 10 points.la source
Python 3,
124123 octetsComment ça marche?
Essayez-le en ligne ici .
Mon ordinateur indique qu'il a généré 0,023283% de tous les nombres premiers de Sophie Germain inférieurs à 2 ^ 32.
Une fois terminé, je le posterai sur pastebin s'il y a suffisamment de lignes. Vous pouvez l'utiliser pour vérifier que vous les avez tous.
la source
.5
est plus court que0.5
Perl, 2 * 57-10 = 104
42 secondes à 2 ^ 32, 1m26s à 2 ^ 33. S'exécutera 50% plus rapidement s'il
2*$_+1
est écrit en tant que1+$_<<1
mais c'est un octet de plus.Le module installe également de
primes.pl
nombreux filtres dont un pour les nombres premiers de Sophie-Germain. Donc:primes.pl --so 2**33
(20 octets)la source
Rubis, 61 * 2 - 10 = 112
Il faudrait une éternité pour imprimer toutes les valeurs jusqu'à 2 ** 32
Éditer
Rasé de quelques octets en remplaçant Float :: INFINITY pour 1.0 / 0
la source
PARI / GP, 46 * 2 - 10 = 82
la source