Définissez que le nombre naturel p est un nombre premier +1 du nombre naturel n si p est un nombre premier et que la représentation binaire standard (c'est-à-dire sans zéros non significatifs) de p peut être obtenue en ajoutant (c'est-à-dire en ajoutant, en ajoutant ou en ajoutant) un seul 1 à la représentation binaire standard de n .
Par exemple, la représentation binaire de 17 est 10001 2 . Les nombres naturels distincts qui peuvent être formés en ajoutant 1 à 10001 2 sont 110001 2 ou 49 , 101001 2 ou 41 , 100101 2 ou 37 et 100011 2 ou 35 .
Parmi ceux-ci, 41 et 37 sont des nombres premiers, donc 17 a deux nombres premiers +1 .
Tâche
Écrivez un programme ou une fonction qui accepte en entrée un entier strictement positif n et imprime ou renvoie le nombre de nombres premiers +1 distincts de n .
L'entrée et la sortie doivent être soit un entier, soit sa représentation sous forme de chaîne décimale ou unaire.
Les règles de code-golf standard s'appliquent.
Cas de test
Input: 4
Output: 0
Input: 1
Output: 1
Input: 17
Output: 2
Input: 33
Output: 3
Input: 553
Output: 4
Input: 3273
Output: 5
Input: 4145
Output: 6
Input: 4109
Output: 7
Input: 196869
Output: 8
Réponses:
Pyth, 20 octets
Suite de tests
la source
JavaScript ES6, 141 octets
143147160Économise 13 octets, grâce à @Naouak
Méthode similaire à ma réponse TeaScript, utilise RegExp (vous m'avez bien entendu) pour vérifier les nombres premiers.
Non golfé
la source
(p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0)('0b'+l,2)
au lieu de!Array(+('0b'+l)+1).join(1).match(/^1?$|^(11+?)\1+$/)
Minkolang 0,11 ,
5452 octetsExplication
la source
TeaScript , 22 octets
TeaScript commence à ressembler à APL ... Les caractères spéciaux sont convertis en séquences plus longues et souvent répétées
L'interprète en ligne doit vérifier "les entrées sont des nombres".
Explication && Ungolfed
la source
Julia,
5552 octetsk=2.^(0:endof(bin(n)))
génère un tableau contenant les puissances de 2 de 1 à la puissance la plus élevée inférieure àn
.2n+k-n%k
utilise ensuite les opérations de tableau pour déterminer tous les "numéros +1" possibles.∪
(équivalent àunion
, qui fait la même chose queunique
dans cette situation) supprime les valeurs de répétition.sum(isprime,)
Compte ensuite le nombre de nombres premiers sur la liste.la source
CJam, 26 octets
Pas un gagnant, mais il bat les réponses CJam existantes assez solidement et c'est la première fois que j'utilise la commande 0.6.5
e\
.Testez-le ici.
Explication
Une chose à noter est que nous échangeons les bits au
0
et1
avant de faire la première copie, nous perdons donc le tableau d'origine avec le1
préfixé à l'avant. Cependant, l'entrée est toujours positive, donc le premier chiffre sera toujours un. Cela signifie qu'après en avoir ajouté un autre, la liste des chiffres commencera toujours par,[1 1 ...]
donc le premier échange sera un no-op dans tous les cas.la source
Mathematica, 87 octets
la source
Julia,
11010810487 octetsCela crée une fonction sans nom qui accepte et entier et renvoie un entier. Pour l'appeler, donnez-lui un nom, par exemple
f=n->...
.Non golfé:
17 octets enregistrés grâce à Glen O!
la source
bin
doit commencer par un 1, vous n'avez donc pas besoin de gérer séparément"1"b
. Et quandi=length(b)
, vous aurez l'b[i+1:end]
équivalent de""
, donc pas besoin de cette entrée (juste besoin de gérerb=bin(n)
à un moment donné). Etsum
fera la même chose quecount
pour deux octets de moins.b
toute façon, il pourrait aussi bien l'obtenir avec un peu d'astuce -b=bin(n)[s=1:end]
et ensuitefor i=s
pour la compréhension.bin
doit être 1, et vous obtiendrez ceci:n->sum(i->isprime(parse(Int,i,2)),(b=bin(n);unique([b[[1:i;1;i+1:end]]for i=1:endof(b)])))
- cela ramène le décompte à 90 octets.unique
parunion
- il fera la même chose, s'il ne reçoit qu'un seul tableau en entrée. Ou mieux encore,∪
au lieu deunion
.CJam, 58 octets
Cela m'a pris un jour et c'était ma 4ème itération.
la source
Japt
-x
,1411 octetsEssayez-le ou exécutez tous les cas de test
la source
PHP, 145 octets
J'ai ajouté une nouvelle ligne pour la lisibilité:
la source
CJam, 34 octets
Essayez-le en ligne
La première version sera mise à jour si je trouve quelque chose de mieux.
la source
APL, 55
Version spécifique Dyalog 2 octets plus courte:
la source
Matlab (120)
la source
Brachylog , 17 octets
Essayez-le en ligne!
Entrée via la variable d'entrée et sortie via la variable de sortie.
la source
Gelée , 13 octets
Essayez-le en ligne!
la source
Python 2 , 103 octets
Essayez-le en ligne!
la source