JavaScript (ES6), 123 118 115 111 104 96 byte
Đã lưu 4 byte nhờ @Arnauld
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))
Một sự kết hợp của ba chức năng đệ quy điển hình. Cảnh báo trình tự theo thứ tự ngược lại và chấm dứt lỗi "đệ quy quá nhiều".
Kiểm tra đoạn
(sửa đổi để xuất ra trang)
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>
Hàm chính có thể trả về một mảng cho 104 byte:
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):[]
Nó cũng có thể không đệ quy với chi phí của một byte khác:
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]
Đây là cái tôi đã bắt đầu với: (Đã lưu 6 byte nhờ @Arnauld)
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:[]):[]
Tôi đã thử chơi golf này hơn nữa và quản lý để thực hiện nó trong 104 byte. Sau đó, tôi nhận ra rằng tôi đã tìm thấy giải pháp đó (nó nằm ở cuối câu trả lời). Bạn không ghét nó khi điều đó xảy ra? : P
Một nỗ lực không đệ quy tại hàm chính (một lần nữa, cùng số byte):
n=>[for(i of Array(n))if(P(--n)&G(n,o=t=0))n]
Điều này có một lộ trình dễ dàng là đếm có bao nhiêu 0 và 1 trong biểu diễn nhị phân:
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):[]
Điều tương tự với một sự hiểu biết mảng:
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]
Điều này có một lộ trình khó hơn một chút để làm điều tương tự:
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):[]
Và tuyến này có một tuyến đường liên quan khác ngắn như ban đầu:
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):[]
Một lần nữa, bạn có thể chơi golf 8 byte bằng cách làm cho nó cảnh báo chuỗi theo thứ tự ngược lại:
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))