Primzahlen mit Primzahlen


23

Aufgabe

Finden Sie alle nicht-negativen Ganzzahlen bis einschließlich einer gegebenen positiven Ganzzahl n , die nicht Null ist und die Primzahl sind 1'sund 0'sin ihrer binären Darstellung (ohne führende Nullen) ebenfalls Primzahl sind.

Hier sind die ersten fünf solcher Primzahlen,

17, 19, 37, 41, 79

10001, 10011, 100101, 101001, 1001111

Erläuterungen und Regeln

  • Standardmäßige E / A-Methoden werden akzeptiert .
  • Die Antwort kann ein Programm oder eine Funktion sein.
  • Wenn es keine solchen Primzahlen gibt, wird Müll ausgegeben oder nichts.
  • Standardlücken sind verboten.
  • 2 3 5 7habe es nicht in die Liste geschafft, da in ihrer binären Darstellung die Anzahl der Vorkommen von 0'sund 1'skeine Primzahlen sind. Betrachten Sie, 7wessen binäre Darstellung ist 111, hier 0kommt nullmal vor und null ist nicht Primzahl.
  • Einbauten sind erlaubt.

  • Der kürzeste Code in Bytes gewinnt!

Testfälle

10
[]

100
[17, 19, 37, 41, 79]

150
[17, 19, 37, 41, 79, 103, 107, 109, 131, 137]


1
Sie fragen nach allen Primzahlen unter einem gegebenen n, aber Sie sagen auch inklusive. Was meinst du
Riley

@Riley Was ich meine ist ... all the numbers from 1....n. Ich weiß nicht, wie ich es auf einfache Weise umformulieren soll.
Gurupad Mamadapur


3
@ mbomb007 Für jede Gesamtreihenfolge von Ganzzahlsequenzen wäre die kleinste uninteressante Ganzzahlsequenz selbst interessant und daher der Aufnahme in OEIS wert. Ergo, OEIS enthält alle ganzzahligen Sequenzen,
egal ob

9
Ich frage mich, ob Mathematica mehr Builtins enthält als OEIS Sequenzen hat ...
Neil

Antworten:


5

Jelly , 14 13 Bytes

RBċþd`ÆPPTfÆR

Probieren Sie es online!

Wie es funktioniert

RBċþd`ÆPPTfÆR  Main link. Argument: n

R              Range; yield [1, ..., n].
 B             Binary; convert each integer to base 2.
    d`         Divmod self; yield [n : n, n % n], i.e., [1, 0].
  ċþ           Count table; count the occurrences of 1 and 0 in each binary
               representation, yielding a pair of lists of length n.
      ÆP       Test each count for primality.
        P      Product; multiply the corresponding Booleans.
         T     Truth; get all indices of 1, yielding the list of integers in
               [1, ..., n] that have a prime amount of 0's and 1's.
           ÆR  Prime range; yield all primes in [1, ..., n].
          f    Filter; intersect the lists.

2
Dieser d`​Trick ist etwas anderes ...
ETHproductions

10

Python 2 , 106 102 100 Bytes

k=m=1;p={0}
exec"p^={m%k*k,0};c=bin(k).count\nif{k,c('1'),c('0')-1}<p:print k\nm*=k*k;k+=1;"*input()

Probieren Sie es online!

Hintergrund

Um Primzahlen zu identifizieren, verwenden wir eine Folgerung aus Wilsons Theorem :

Folgerung aus Wilsons Satz

Wie es funktioniert

Wir beginnen mit der Initialisierung von k und m als 1 und p als Menge {0} . Man beachte, dass m = 1 = 0! ² = (k - 1)! ² ist . Unmittelbar danach wird der folgende Code n- mal ausgeführt, wobei n die von der Standardeingabe gelesene Ganzzahl ist.

p^={m%k*k,0};c=bin(k).count
if{k,c('1'),c('0')-1}<p:print k
m*=k*k;k+=1

In der Konsequenz ist m% k 1, wenn k eine Primzahl ist, und 0, wenn dies nicht der Fall ist . Somit {m%k*k,0}wird die Menge {k, 0} zurückgegeben, wenn k eine Primzahl ist, und die Menge {0}, wenn dies nicht der Fall ist .

Wenn (und nur wenn) k eine Primzahl ist, da p zu diesem Zeitpunkt k nicht enthalten kann , p^={m%k*k,0}addiert die vorhandene symmetrische Differenz k zur Menge p . Auch p enthalten 0 nach dem Update , wenn und nur wenn es nicht enthält 0 vor, so 0 ε p , wenn und nur wenn k gerade ist.

In derselben Zeile definieren wir eine Funktion c via c=bin(k).count, die die Vorkommen ihres Arguments in der Binärdarstellung von k zählt .

Die zweite Zeile erzeugt die tatsächliche Ausgabe. {k,c('1'),c('0')-1}liefert die Menge , die besteht aus k selbst, der Anzahl der gesetzten Bits in k , und die Anzahl der Bits in ungesetzt k . Da die Ausgabe von bin(k)mit 0b beginnt , müssen wir dekrementieren c('0'), um die führende 0 zu berücksichtigen .

Wenn sie alle Primzahlen sind, gehören sie alle zu p , das inzwischen alle Primzahlen bis zu k (und möglicherweise 0 ) enthält. Wenn k eine Mersenne-Zahl ist (dh wenn es nur gesetzte Bits hat), c('0')-1ergibt sich 0 . Da Mersenne - Zahlen ungerade sind, p wird nicht enthalten 0 , so wird der Zustand fehlschlagen.

Nach dem (potentiellen) Ausdruck von k multiplizieren wir m mit . Da m = (k-1)! ² vor dem Update ist, ist m = k! ² danach. Nach dem Inkrementieren von k gilt wieder die Beziehung m = (k-1)! ² und wir sind bereit für die nächste Iteration.


9

Mathematica, 80 68 54 Bytes

Select[p=PrimeQ;Range@#,p@#&&And@@p/@#~DigitCount~2&]&

Erläuterung

Select[p=PrimeQ;Range@#,p@#&&And@@p/@#~DigitCount~2&]&

       p=PrimeQ                                        (* Store prime check func. in p *)
Select[                                             ]  (* Select *)
                Range@#                                (* from a list {1..n} *)
                        p@#                            (* numbers that are prime *)
                           &&                          (* And *)
                                     #~DigitCount~2    (* whose digit counts in binary *)
                             And@@p/@                  (* are prime as well *)

8

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)

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))

Sie müssen nicht wirklich rekursiv übergeben a. Initialisiere es einfach beim ersten Aufruf von G. (Das sollte 4 Bytes sparen.)
Arnauld

@ Arnauld Oh ja, danke! Das macht Spaß :-)
ETHproductions

1
Wow das ist viel gesunken. Gute Arbeit
George Reith

6

Jelly , 17 16 Bytes

BĠL€µ;LÆPẠ
ÆRÇÐf

Probieren Sie es online!

Wie?

BĠL€µ;LÆPẠ - Link 1, hasPrimeBits: n  e.g. 7         or 13
B          - convert to binary        e.g. [1,1,1]  or [1,1,0,1]
 Ġ         - group indices            e.g. [1,2,3]  or [3,[1,2,4]]
  L€       - length of €ach           e.g. 3          or [1,3]
    µ      - monadic chain separation
     ;L    - concatenate length       e.g. [3,1]      or [1,3,2]
           -     this caters for the edge case of Mersenne primes (like 7), which have
           -     no zero bits, the length will be 1, which is not prime.
       ÆP  - isPrime?                 e.g. [1,0]      or [0,1,1]
         Ạ - All?                     e.g. 0          or 0

ÆRÇÐf - Main link: N
ÆR    - prime range (primes up to and including N)
   Ðf - filter keep those satisfying
  Ç   - last link (1) as a monad

1
Ah danke, ich sehe, dass du das geändert hast, das spart ein Byte.
Jonathan Allan

1
Da hast du das Alphabet am Laufen. ẠBÇЀfĠ...
mbomb007

2
@ mbomb007 Ja, das LƵ;Pverwirrt mich immer ein bisschen.
Jonathan Allan

6

05AB1E , 14 Bytes

ƒNpNbSD_‚OpP&–

Probieren Sie es online!

Erläuterung

ƒ               # for N in [0 ... input]
 Np             # push N is prime
   Nb           # push N converted to binary
     S          # split into individual digits
      D_        # push an inverted copy
        ‚       # pair the 2 binary lists
         O      # sum them
          p     # elementwise check for primality
           P    # product of list
            &   # and with the primality of N
             –  # if true, print N

Ich kann immer noch keine Verwendung finden , diese Herausforderung schien gut dafür zu sein, ist aber länger:FNb{.¡€gpONp+3QiN}})
Magic Octopus Urn

@carusocomputing: Ich hatte eine ähnliche Lösung, die ich auch in Betracht gezogen habe, aber sie endete auch etwas länger als diese.
Emigna


4

MATL , 16 15 Bytes

:"@tB!t~hshZp?@

Probieren Sie es online!

:         % Input n (implicit). Push range [1 2 ... n]
"         % For each k in [1 2 ... n]
  @       %   Push k
  tB!     %   Duplicate. Binary expansion as an m×1 vector
  t~      %   Duplicate. Negate
  hs      %   Concatenate horizontally into an m×2 matrix. Sum of each column.
          %   This gives a 1×2 vector. However, for k==1 this gives the sum of
          %   the original 1×2 matrix (m==1). But fortunately it doesn't matter
          %   because 1 is not a prime anyway
  h       %   Concatenate horizontally into a 1×3 row vector
  Zp      %   Isprime function applied on each of those three numbers
  ?       %   If all gave true
    @     %     Push k
          %   End (implicit)
          % End (implicit)
          % Display (implicit)

4

Perl, 101 Bytes

99 Byte Code + -nlFlags.

$r=q/^1?$|^(11+)\1+$/;for$@(2..$_){$_=sprintf"%b",$@;print$@if(1x$@)!~$r&y/01/1/dr!~$r&s/0//gr!~$r}

Um es auszuführen:

perl -lne '$r=q/^1?$|^(11+)\1+$/;for$@(2..$_){$_=sprintf"%b",$@;print$@if(1x$@)!~$r&y/01/1/dr!~$r&s/0//gr!~$r}' <<< 150

Einige kurze Erklärungen enthalten
$r den klassischen Prime Checking Regex ( q/^1?$|^(11+)\1+$/).
Prüft für alle Zahlen zwischen 2 und der Eingabe,
(1x$@)!~$rob die Zahl eine Primzahl ist,
y/01/1/dr!~$rprüft, ob die Zahl 0in der Binärdarstellung eine Primzahl ist,
s/0//gr!~$rprüft, ob die Zahl 1in der Binärdarstellung eine Primzahl ist.
(Wenn die 3 Bedingungen erfüllt sind, wird es print$@gedruckt).


Danke für die Erklärung. Ziemlich erstaunlich, was man mit etwas Regex und Logik
anfangen kann

@Emigna Danke! Die Erklärungen sind nicht sehr detailliert (es fällt mir schwer, längere Erklärungen zu schreiben), aber es scheint, als ob es genug für Sie war :) (Ich glaube immer noch, dass der Code etwas zu lang ist, aber ich sehe nicht, wie ich ihn bekommen soll es kürzer, also hier ist es)
Dada

1
Als jemand, der Perl nicht kennt, schätze ich jede Erklärung, die ich bekommen kann. Es wird mir nicht helfen, ein Perl-Programm zu erstellen, aber ich verstehe einige der Gründe für die verwendete Methode, was immer interessant ist.
Emigna

3

Python, 129 125 123 Bytes

Wenn nur Null Primzahl wäre ...

p=lambda n:all(n%m for m in range(2,n))*n>1
lambda n:[i for i in range(n+1)if p(i)*all(p(bin(i)[2:].count(x))for x in'01')]

Probieren Sie es online aus

Function pist die Prim-Checking-Funktion, die >0am Ende so eingestellt ist, dass sie auch für Null arbeitet, was andernfalls zurückkehren würde -1. Das anonyme Lambda ist das Lambda, das alle erforderlichen Bedingungen überprüft.


Hier ist eine etwas andere Methode unter Verwendung eines Mengenverständnisses. Das Ergebnis ist eine Menge. ( 124 Byte ):

p=lambda n:all(n%m for m in range(2,n))*n>1
lambda n:{i*p(i)*all(p(bin(i)[2:].count(x))for x in'01')for i in range(n+1)}-{0}

3

Perl 6 , 65 Bytes

{grep {all($^a,|map {+$a.base(2).comb(~$_)},0,1).is-prime},0..$_}

Versuch es

Erweitert:

{           # bare block lambda with implicit parameter 「$_」

  grep      # find all of the values where

  {         # lambda with placeholder parameter 「$a」

    all(    # all junction ( treat multiple values as a single value )

      $^a,  # declare parameter to block

      |\    # slip the following list into the outer list

      # get the count of 0's and 1's in the binary representation
      map

      {             # bare block lambda with implicit parameter 「$_」

        +           # turn to numeric ( count the values in the list )
        $a          # the outer parameter
        .base(2)    # in base 2
        .comb(~$_)  # find the characters that are the same as
      },0,1         # 0 or 1

    # ask if $a, count of 0's, count of 1's are all prime
    ).is-prime

  },

  0 .. $_ # Range from 0 to the input inclusive

}

3

Oktave, 73 Bytes

@(n)(p=primes(n))(all(isprime([s=sum(dec2bin(p)'-48);fix(log2(p))+1-s])))

Probieren Sie es online!

@(n)
    (p=primes(n))                           generate prime numbers
        (all(                               from them select those that
            isprime(                        are prime both
                [s=sum(dec2bin(p)'-48);     sum of 1s
                fix(log2(p))+1-s])))        and sum of 0s

2

CJam , 26 27 Bytes

ri){mp},{2b_1-,mp\0-,mp&},p

Einfacher Algorithmus, wird weiter Golf spielen.

EDIT: Passwort n war inklusive.

Probieren Sie es online!

Zum Spaß ist dies sehr ähnlich und auch 27 Bytes:

ri){_mp\2b_1-,mp\0-,mp&&},p

Erläuterung

ri                          e# Take an int as input
  ){mp},                    e# Take the range up and including to the input, 
                            e#   including only prime numbers
       {                    e# For each prime...
        2b_                 e# Convert it to binary and copy it
           1-,mp            e# Take the top binary number, remove 1's, check if the length 
                            e#   is prime
                \           e# Swap top elements
                 0-,mp      e# Do the same but remove 0's
                      &     e# And
                       },   e# Filter out primes for which the above block was false
                         p  e# Print nicely

2

Jelly , 14 Bytes

BċÆPðÐf
ÆRç0ç1

Probieren Sie es online!

Leider konnte ich nur mit @Dennis binden, aber der Algorithmus scheint etwas anders zu sein, also poste ich das trotzdem.

Erläuterung

Hilfsfunktion (löscht Listenelemente, die keine Primzahl des Auftretens eines bestimmten Bits haben):

BċÆPðÐf
     Ðf   Filter {the first argument}, looking for truthy returns from
    ð     the preceding code, which takes two arguments:
B         Convert {the element being checked} to binary
 ċ        Count the number of occurrences of {the second argument}
  ÆP      Return true if prime, false if not prime

Hauptprogramm:

ÆRç0ç1
ÆR        Generate all primes from 2 to the input
  ç0      Call the subroutine to require a prime 0 count
    ç1    Call the subroutine to require a prime 1 count

2

Haxe, 169 171 Bytes

function f(n,?p)return[for(j in(p=[for(i in 0...++n)i<2?0:i]))if(j>0){var x=j*2,y=0,z=0,k=j;while(k<n)p[k+=j]=0;while((x>>=1)>0)x&1>0?y++:z++;p[y]<1||p[z]<1?continue:j;}];

Nichts verrücktes. Im Wesentlichen ein modifiziertes Sieb aus Eratosthenes, das die Primzahl der 0/1-Zählung in derselben Iteration bewertet, in der höhere Nicht-Primzahlen durchgestrichen werden. Mit etwas Leerzeichen:

function f(n, ?p)
  return [ for (j in (p = [ for(i in 0...++n) i < 2 ? 0 : i ]))
    if (j > 0){
      var x = j * 2, y = 0, z = 0, k = j;
      while (k < n)
        p[k += j] = 0;
      while((x >>= 1) > 0)
        x & 1 > 0 ? y++ : z++;
      p[y] < 1 || p[z] < 1 ? continue : j;
    }
  ];

Aber heute habe ich gelernt, ich könnte setzen continue einen ternären Operator einsetzen kann, und Haxe macht es nichts aus.

Edit: +2 weil nist eine inklusive Obergrenze!


Hey, das nist inklusive.
Gurupad Mamadapur

@ GurupadMamadapur Du hast recht, behoben!
Aurel Bílý

2

Bash + GNU-Dienstprogramme, 129 126 123 114 111 109 Bytes

seq '-fp()([ `factor|wc -w` = 2 ]);g()(dc -e2o${n}n|tr -cd $1|wc -c|p);n=%.f;p<<<$n&&g 0&&g 1&&echo $n' $1|sh

Probieren Sie es online!

Bemerkte den Kommentar, dass die Ausgabe nicht in aufsteigender Reihenfolge erfolgen muss - 3 Bytes durch Abwärtszählen statt Aufwärtszählen werden eingespart.

Grep wurde durch wc ersetzt, um 3 zusätzliche Bytes zu sparen.

Eliminierte eine Variable (9 weitere Bytes aus).

Der verwendete Wegefaktor wurde geändert - 3 weitere Bytes.

Hat es mit seq (2 Bytes) golfer gemacht.


2

Python, 172 170 168 159 154 133 130 Bytes

p=lambda n:[i for i in range(1,n)if n%i==0]==[1]
lambda n:[i for i in range(n+1)if p(i)*all(p(bin(i)[2:].count(x))for x in'10')]

Verwendung: Rufen Sie die anonyme Lambda-Funktion auf
Methode pprüft, ob eine Zahl eine Primzahl ist


2 + 2 + 9 = 13 Bytes dank Gurupad Mamadapur
gespeichert 5 Bytes dank mbomb007 gespeichert


1
Sie können 2 mehr sparen dies durch die Verwendung v-def v(n):a=bin(n)[2:];return p(n)and(p(a.count('1'))and p(a.count('0')))
Gurupad Mamadapur

1
Eine viel kürzere -v=lambda a:p(a)and all(p(bin(a)[2:].count(x))for x in['1','0'])
Gurupad Mamadapur

2
Zeichenfolgen sind iterabel. So können Sie verwenden for x in'01'.
mbomb007

1

Pyke, 21 Bytes

S#j_PI\0[jb2R/_P)I\1[

Probieren Sie es hier aus!

S#j                   - for j in filter(range(1, input+1))
   _PI                -  if is_prime(j):
        [jb2R/_P)     -   function_[(a) = V
         jb2          -      base_2(j)
            R/        -     ^.count(a)
      \0         I    -   if function_[("0"):
                  \1[ -    function_[("1")




1

JavaScript (ES6), 110 Byte

B=n=>n?B(n>>1,v[n%2]++):v.every(n=>(P=i=>n%--i?P(i):1==i)(n))
F=(n,a=[])=>n?F(n-1,B(n,v=[0,0,n])?[n,...a]:a):a


Diese Primalitätstestfunktion ist einfach unglaublich :-) Hast du sie selbst erstellt?
ETHproductions

@ETHproductions Du hast es gesehen, bevor codegolf.stackexchange.com/a/91309/11182 von hier geändert wurde. Ich habe mir auch Ihren 1 und 0 Zählcode geliehen (whooped alles, was mir einfällt), aber leider konnte ich Ihre Byteanzahl nicht übertreffen.
George Reith

@ETHproductions Guter Fang danke! War ein Artefakt einer früheren Version
George Reith

1

MATLAB, 50 Bytes

@(n)all(isprime([n,sum(de2bi(n)),sum(~de2bi(n))]))

1

Haxe, 158–147 Bytes

function p(n,x=1)return n%++x<1||n<2?x==n:p(n,x);function f(n){var q=n,t=0,o=0;while(q>0){t++;o+=q%2;q>>=1;}p(n)&&p(o)&&p(t-o)?trace(n):0;f(n-1);};

Gibt STDOUT aus und wird bei einem "zu viel Rekursion" -Fehler beendet. anrufen mit zb f(1000);. Sie können eine whilefehlerfreie Schleife für 156 Bytes verwenden:

function p(n,x=1)return n%++x<1||n<2?x==n:p(n,x);function f(n){while(n>0){var q=n,t=0,o=0;while(q>0){t++;o+=q%2;q>>=1;}p(n)&&p(o)&&p(t-o)?trace(n):0;n--;}};

Wenn Sie einen Bereich verwenden, der drei Bytes länger ist:

function p(n,x=1)return n%++x<1||n<2?x==n:p(n,x);function f(n){for(i in 0...n+1){var q=i,t=0,o=0;while(q>0){t++;o+=q%2;q>>=1;}p(i)&&p(o)&&p(t-o)?trace(i):0;}};

Testen Sie es online!


1

Rust, 147 Bytes

fn f(x:u32){let p=|n|n>1&&(2..n).all(|x|n%x!=0);for n in 9..x+1{if p(n)&&p(n.count_ones())&&p(n.count_zeros()-n.leading_zeros()){print!("{} ",n)}}}

Spielplatz Link

Das count_ones, count_zerosundleading_zeros Methoden waren sehr praktisch.

Formatierte Version

fn f(x: u32) {
    // primality test closure using trial division
    let p = |n| n > 1 && (2..n).all(|x| n % x != 0);

    for n in 9..x + 1 {
        if p(n) && p(n.count_ones()) && p(n.count_zeros() - n.leading_zeros()) {
            print!("{} ", n)
        }
    }
}

1

Perl 6 , 50 Bytes

{grep {($_&+.base(2).comb(~0&~1)).is-prime},0..$_}

Variation der Antwort von b2gills unter Verwendung des & Junction- Operators mit großer Wirkung.

Probieren Sie es online!

Wie es funktioniert

{                                                }  # Lambda
                                            0..$_   # Range from 0 to the lambda argument.
 grep {                                   },        # Filter values satisfying:
       ($_                      ).is-prime          #  a) The Number itself is prime.
       (   +.base(2).comb(~0   )).is-prime          #  b) The count of 0's is prime.
       (   +.base(2).comb(   ~1)).is-prime          #  c) The count of 1's is prime.
          &                 &                       # Junction magic! :)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.