JavaScript (ES6), 123 118 115 111 104 96 Byte
4 Bytes dank @Arnauld eingespart
G=n=>n?G(n>>1,++a[n%2]):a.some(n=>(P=x=>n%--x?P(x):x)(n)-1)
F=n=>F(n-1,G(n,a=[0,0,n])||alert(n))
Eine Kombination von drei typischen rekursiven Funktionen. Warnt die Sequenz in umgekehrter Reihenfolge und endet bei einem "zu viel Rekursion" -Fehler.
Testschnipsel
(geändert, um auf der Seite auszugeben)
alert = s => O.textContent += s + "\n"
G=n=>n?G(n>>1,++a[n%2]):a.some(n=>(P=x=>n%--x?P(x):x)(n)-1)
F=n=>F(n-1,G(n,a=[0,0,n])||alert(n))
F(1000)
<pre id=O></pre>
Die Hauptfunktion kann ein Array für 104 Bytes zurückgeben:
G=n=>n?G(n>>1,++a[n%2]):a.some(n=>(P=x=>n%--x?P(x):x)(n)-1)
F=n=>n?F(n-1).concat(G(n,a=[0,0,n])?[]:n):[]
Es kann auch auf Kosten eines anderen Bytes nicht rekursiv sein:
G=n=>n?G(n>>1,++a[n%2]):a.some(n=>(P=x=>n%--x?P(x):x)(n)-1)
n=>[for(_ of Array(n))if(!G(--n,a=[0,0,n]))n]
Hier ist die, mit der ich angefangen habe: (6 Bytes dank @Arnauld gespeichert)
P=(n,x=n)=>n>1&--x<2||n%x&&P(n,x)
G=n=>n?G(n>>1,o+=n%2,t++):P(o)&P(t-o)
F=n=>n?F(n-1).concat(P(n)&G(n,o=t=0)?n:[]):[]
Ich habe es weiter versucht und es in 104 Bytes geschafft - dann wurde mir klar, dass ich diese Lösung bereits gefunden hatte (sie steht am Ende der Antwort). Hassen Sie es nicht, wenn das passiert? : P
Ein nicht-rekursiver Versuch, die Hauptfunktion aufzurufen (wieder die gleiche Anzahl von Bytes):
n=>[for(i of Array(n))if(P(--n)&G(n,o=t=0))n]
Mit dieser Methode können Sie ganz einfach zählen, wie viele Nullen und Einsen in der Binärdarstellung enthalten sind:
F=n=>n?F(n-1).concat([n,(G=x=>n.toString(2).split(x).length-1)(0),G(1)].some(n=>(P=x=>n%--x?P(x):x)(n)-1)?[]:n):[]
Dasselbe gilt für ein Array-Verständnis:
n=>[for(_ of Array(n))if(![--n,(G=x=>n.toString(2).split(x).length-1)(0),G(1)].some(n=>(P=x=>n%--x?P(x):x)(n)-1))n]
Dieser nimmt einen etwas schwierigeren Weg, um dasselbe zu tun:
F=n=>n?F(n-1).concat([n,(G=(x,w=n)=>w&&G(x,w>>1)+(w%2==x))(0),G(1)].some(n=>(P=x=>n%--x?P(x):x)(n)-1)?[]:n):[]
Und dieser nimmt noch eine andere verwandte Route, die so kurz wie das Original ist:
F=n=>n?F(n-1).concat([n,o=(G=x=>x&&x%2+G(n>>++t))(n,t=0),t-o].some(n=>(P=x=>n%--x?P(x):x)(n)-1)?[]:n):[]
Wiederum können Sie 8 Bytes Golf spielen, indem Sie die Sequenz in umgekehrter Reihenfolge warnen lassen:
F=n=>F(n-1,[n,o=(G=x=>x&&x%2+G(n>>++t))(n,t=0),t-o].some(n=>(P=x=>n%--x?P(x):x)(n)-1)||alert(n))