Definieren Sie, dass die natürliche Zahl p eine +1 Primzahl der natürlichen Zahl n ist, wenn p eine Primzahl ist und die Standardbinärdarstellung (dh ohne führende Nullen) von p durch Addieren (dh Voranstellen, Anhängen oder Einfügen) erhalten werden kann. eine einzelne 1 zur binären Standarddarstellung von n .
Zum Beispiel kann die Binärdarstellung von 17 ist 10001 2 . Die verschiedenen natürlichen Zahlen, die durch Addition einer 1 zu 10001 2 gebildet werden können, sind 110001 2 oder 49 , 101001 2 oder 41 , 100101 2 oder 37 und 100011 2 oder 35 .
Unter diesen sind 41 und 37 Primzahlen, also hat 17 zwei +1 Primzahlen .
Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die eine streng positive Ganzzahl n als Eingabe akzeptiert und die Anzahl der eindeutigen + 1-Primzahlen von n ausgibt oder zurückgibt .
Eingabe und Ausgabe müssen entweder eine Ganzzahl oder eine dezimale oder eine unäre Zeichenfolgendarstellung sein.
Es gelten die Standardregeln für Code-Golf .
Testfälle
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
Antworten:
Pyth, 20 Bytes
Test Suite
quelle
JavaScript ES6, 141 Bytes
143147160Spart dank @Naouak 13 Bytes
Ähnlich wie bei meiner TeaScript-Antwort wird RegExp (Sie haben mich richtig gehört) verwendet, um nach Primzahlen zu suchen.
Ungolfed
quelle
(p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0)('0b'+l,2)
!Array(+('0b'+l)+1).join(1).match(/^1?$|^(11+?)\1+$/)
Minkolang 0.11 ,
5452 BytesErläuterung
quelle
TeaScript , 22 Bytes
TeaScript fängt an, wie APL auszusehen ... Die Sonderzeichen werden in längere, häufig wiederholte Sequenzen konvertiert
Stellen Sie sicher, dass der Online-Dolmetscher "Eingaben sind Zahlen" aktiviert hat.
Erklärung && Ungolfed
quelle
Julia,
5552 Bytesk=2.^(0:endof(bin(n)))
erzeugt ein Array mit Potenzen von 2 von 1 bis zur höchsten Potenz kleiner alsn
.2n+k-n%k
verwendet dann Array-Operationen, um alle möglichen "+1-Zahlen" zu bestimmen.∪
(entsprichtunion
, was dasselbe wieunique
in dieser Situation tut ) entfernt die Wiederholungswerte. Dannsum(isprime,)
zählt die Anzahl der Primzahlen auf der Liste.quelle
CJam, 26 Bytes
Kein Gewinner, aber es schlägt die vorhandenen CJam-Antworten ziemlich solide und es ist das erste Mal, dass ich den Befehl 0.6.5 verwende
e\
.Teste es hier.
Erläuterung
Bemerkenswert ist, dass wir die Bits bei
0
und vertauschen1
vor dem Erstellen der ersten Kopie austauschen, sodass wir das ursprüngliche Array mit dem1
vorangestellten nach vorne verlieren . Die Eingabe ist jedoch immer positiv, sodass die führende Ziffer immer eine ist. Das heißt, nach dem Voranstellen eines anderen beginnt die Ziffernliste immer mit,[1 1 ...]
so dass der erste Swap in jedem Fall ein No-Op ist.quelle
Mathematica, 87 Bytes
quelle
Julia,
11010810487 BytesDadurch wird eine unbenannte Funktion erstellt, die eine Ganzzahl akzeptiert und eine Ganzzahl zurückgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=n->...
.Ungolfed:
17 Bytes gespart dank Glen O!
quelle
bin
muss mit einer 1 beginnen, damit Sie nicht separat behandeln müssen"1"b
. Und wenni=length(b)
, haben Sieb[i+1:end]
Äquivalent zu""
, so dass Sie diesen Eintrag nicht benötigen (müssen ihn nurb=bin(n)
irgendwann bearbeiten ). Undsum
macht dasselbe wiecount
für zwei Bytes weniger.b
ohnehin verwenden, können Sie ihn auch mit einem Trick abrufen -b=bin(n)[s=1:end]
und dannfor i=s
zum Verständnis.bin
1 sein sollte, und Sie erhalten Folgendes:n->sum(i->isprime(parse(Int,i,2)),(b=bin(n);unique([b[[1:i;1;i+1:end]]for i=1:endof(b)])))
- Dadurch wird die Anzahl auf 90 Bytes gesenkt.unique
mitunion
- es wird das gleiche tun, gegeben , wenn nur ein Array als Eingabe. Oder noch besser,∪
anstattunion
.CJam, 58 Bytes
Ich habe einen Tag gebraucht und dies war meine vierte Iteration.
quelle
Japt
-x
,1411 BytesProbieren Sie es aus oder führen Sie alle Testfälle aus
quelle
PHP, 145 Bytes
Ich habe eine neue Zeile für die Lesbarkeit hinzugefügt:
quelle
CJam, 34 Bytes
Probieren Sie es online aus
Erste Version, wird aktualisiert, wenn ich etwas besseres finde.
quelle
APL, 55
2 Bytes kürzere Dyalog-spezifische Version:
quelle
Matlab (120)
quelle
Brachylog , 17 Bytes
Probieren Sie es online!
Eingabe über die Eingabevariable und Ausgabe über die Ausgabevariable.
quelle
Gelee , 13 Bytes
Probieren Sie es online!
quelle
Python 2 , 103 Bytes
Probieren Sie es online!
quelle