Bilangan prima dengan bit-counts utama


23

Tugas

Cari semua bilangan bulat non-negatif sampai dengan dan termasuk diberikan non-nol bilangan bulat positif n , yang prima dan hitungan 1'sdan 0'sdalam representasi biner mereka (tidak memiliki nol terkemuka) yang prima juga.

Berikut adalah lima bilangan prima seperti pertama,

17, 19, 37, 41, 79

10001, 10011, 100101, 101001, 1001111

Klarifikasi dan aturan

  • Metode I / O standar diterima .
  • Jawabannya bisa berupa program atau fungsi.
  • Jika tidak ada bilangan prima seperti itu maka hasilkan sampah atau tidak sama sekali.
  • Celah standar dilarang.
  • 2 3 5 7tidak masuk ke daftar karena dalam representasi biner jumlah kejadian 0'sdan 1'stidak prima. Pertimbangkan 7representasi binernya 111, di sini 0terjadi nol kali dan nol bukan prima.
  • Built-in diizinkan.

  • Kode terpendek dalam byte menang!

Uji kasus

10
[]

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

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


1
Anda meminta semua bilangan prima di bawah n yang diberikan, tetapi Anda juga mengatakan inklusif. Yang kamu maksud
Riley

@Riley Apa yang saya mean ... all the numbers from 1....n. Saya tidak tahu bagaimana mengucapkannya kembali dengan cara yang sederhana.
Gurupad Mamadapur


3
@ mbomb007 Jelas, untuk setiap urutan urutan bilangan bulat, urutan bilangan bulat terkecil yang tidak menarik akan menarik, dan dengan demikian layak untuk dimasukkan dalam OEIS. Ergo, OEIS berisi semua urutan bilangan bulat, dari semua kepentingan nyata atau yang dibayangkan :-)
Iwillnotexist Idonotexist

9
Saya bertanya-tanya apakah Mathematica mengandung lebih banyak builtin daripada OEIS memiliki urutan ...
Neil

Jawaban:


5

Jelly , 14 13 byte

RBċþd`ÆPPTfÆR

Cobalah online!

Bagaimana itu bekerja

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
Itu d`​trik adalah sesuatu yang lain ...
ETHproductions

10

Python 2 , 106 102 100 byte

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

Cobalah online!

Latar Belakang

Untuk mengidentifikasi bilangan prima, kami menggunakan wajar teorema Wilson :

wajar teorema Wilson

Bagaimana itu bekerja

Kita mulai dengan menginisialisasi k dan m sebagai 1 dan p sebagai set {0} . Perhatikan bahwa m = 1 = 0! ² = (k - 1)! ² . Segera setelah itu, kode berikut dijalankan n kali, di mana n adalah bilangan bulat dibaca dari input standar.

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

Dengan akibat wajar, m% k akan menjadi 1 jika k adalah prima dan 0 sebaliknya. Dengan demikian, {m%k*k,0}akan mengembalikan set {k, 0} jika k adalah prime dan set {0} sebaliknya.

Jika (dan hanya jika) k adalah bilangan prima, karena p tidak dapat memuat k pada titik ini, perbedaan simetris in-place p^={m%k*k,0}akan menambahkan k ke himpunan p . Juga, p akan berisi 0 setelah pembaruan jika dan hanya jika tidak mengandung 0 sebelumnya, jadi 0 ∊ p jika dan hanya jika k adalah genap.

Pada baris yang sama, kita mendefinisikan fungsi c via c=bin(k).count, yang akan menghitung kemunculan argumennya dalam representasi biner k .

Baris kedua menghasilkan output aktual. {k,c('1'),c('0')-1}mengembalikan himpunan yang terdiri dari k itu sendiri, jumlah bit yang diatur dalam k , dan jumlah bit yang tidak diset dalam k . Karena output bin(k)dimulai dengan 0b , kita harus mengurangi c('0')ke akun untuk 0 terkemuka .

Jika semuanya prima, semuanya akan menjadi milik p , yang sekarang berisi semua bilangan prima hingga k (dan berpotensi 0 ). Jika k adalah angka Mersenne (yaitu, jika hanya menetapkan bit), c('0')-1akan menghasilkan 0 . Karena angka Mersenne ganjil, p tidak akan berisi 0 , sehingga kondisinya akan gagal.

Setelah (berpotensi) mencetak k , kami mengalikan m dengan . Karena m = (k-1)! ² sebelum pembaruan, m = k! ² setelahnya. Setelah menambah k , relasi m = (k-1)! ² bertahan lagi dan kami siap untuk iterasi berikutnya.


9

Mathematica, 80 68 54 byte

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

Penjelasan

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

Disimpan 4 byte berkat @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))

Kombinasi dari tiga fungsi rekursif yang khas. Memperingatkan urutan dalam urutan terbalik dan mengakhiri kesalahan "terlalu banyak rekursi".

Cuplikan tes

(dimodifikasi menjadi keluaran ke halaman)

Fungsi utama dapat mengembalikan array untuk 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):[]

Itu juga bisa non-rekursif dengan biaya byte lain:

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]

Inilah yang saya mulai dengan: (Disimpan 6 byte berkat @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:[]):[]

Saya mencoba bermain golf ini lebih jauh dan berhasil melakukannya dalam 104 byte — kemudian menyadari bahwa saya sudah menemukan solusi itu (itu ada di bagian bawah jawabannya). Tidakkah kamu membencinya saat itu terjadi? : P

Upaya non-rekursif pada fungsi utama (sekali lagi, jumlah byte yang sama):

n=>[for(i of Array(n))if(P(--n)&G(n,o=t=0))n]

Yang ini mengambil rute yang mudah untuk menghitung berapa banyak 0 dan 1 dalam representasi biner:

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):[]

Hal yang sama dengan pemahaman array:

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]

Yang ini mengambil rute yang sedikit lebih sulit untuk melakukan hal yang sama:

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):[]

Dan yang satu ini mengambil rute terkait lainnya yang sependek yang asli:

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):[]

Sekali lagi, Anda bisa bermain golf 8 byte dengan membuatnya mengingatkan urutan dalam urutan terbalik:

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

Anda tidak benar-benar perlu lulus secara rekursif a. Inisialisasi saja di panggilan awal ke G. (Itu seharusnya menghemat 4 byte.)
Arnauld

@Arnauld Oh ya, terima kasih! Ini menyenangkan :-)
ETHproductions

1
Wow, ini sudah turun banyak. Kerja bagus
George Reith

6

Jelly , 17 16 byte

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

Cobalah online!

Bagaimana?

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 terima kasih, saya melihat Anda mengubahnya, itu akan menghemat satu byte.
Jonathan Allan

1
Anda mendapatkan alfabet, di sana. ẠBÇЀfĠ...
mbomb007

2
@ mbomb007 Ya, LƵ;Pbit selalu membingungkan saya.
Jonathan Allan

6

05AB1E , 14 byte

ƒNpNbSD_‚OpP&–

Cobalah online!

Penjelasan

ƒ               # 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

Saya masih tidak dapat menemukan gunanya , tantangan ini tampak bagus untuknya, tetapi lebih lama:FNb{.¡€gpONp+3QiN}})
Magic Octopus Gn

@carusocomputing: Saya punya solusi serupa yang saya pertimbangkan juga, tetapi juga berakhir sedikit lebih lama dari ini.
Emigna


4

MATL , 16 15 byte

:"@tB!t~hshZp?@

Cobalah 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 byte

99 byte kode + -nlbendera.

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

Untuk menjalankannya:

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

Beberapa penjelasan singkat
$r memegang regex pengecekan prime klasik ( q/^1?$|^(11+)\1+$/).
Untuk semua angka antara 2 dan input,
(1x$@)!~$rperiksa apakah bilangan prima,
y/01/1/dr!~$rperiksa apakah jumlah 0dalam representasi biner adalah prima,
s/0//gr!~$rperiksa apakah angka 1dalam representasi biner adalah prima.
(jika 3 kondisi terpenuhi,print$@ cetaklah).


Terima kasih untuk penjelasannya. Cukup menakjubkan apa yang dapat Anda lakukan dengan apa yang pada dasarnya adalah regex dan beberapa logika :)
Emigna

@Emigna Terima kasih! Penjelasannya tidak terlalu terperinci (Saya kesulitan menulis penjelasan yang lebih panjang), tetapi sepertinya itu cukup untuk Anda :) (Saya masih percaya kodenya agak terlalu panjang, tapi saya tidak tahu bagaimana caranya mendapatkan lebih pendek, jadi ini dia)
Dada

1
Sebagai seseorang yang tidak mengenal Perl, saya menghargai setiap penjelasan yang bisa saya dapatkan. Itu tidak akan membantu saya membuat program Perl tetapi saya mengerti beberapa alasan di balik metode yang digunakan, yang selalu menarik.
Emigna

3

Python, 129 125 123 byte

Jika hanya nol yang utama ...

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

Cobalah online

Fungsi padalah fungsi prime-checking, yang >0pada akhirnya berfungsi untuk nol juga, yang sebaliknya akan kembali-1 . Lambda anonim adalah lambda yang memeriksa semua kondisi yang diperlukan.


Berikut adalah metode yang sedikit berbeda menggunakan pemahaman himpunan. Hasilnya akan menjadi set. ( 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 byte

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

Cobalah

Diperluas:

{           # 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

Oktaf, 73 byte

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

Cobalah secara 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 byte

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

Algoritma langsung, akan golf lebih lanjut.

EDIT: Lupa dan inklusif.

Cobalah online!

Untuk bersenang-senang, ini sangat mirip dan juga 27 byte:

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

Penjelasan

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 byte

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

Cobalah online!

Sayangnya, saya hanya bisa mengaitkannya dengan @Dennis, tetapi algoritmenya agak berbeda jadi saya tetap memposting ini.

Penjelasan

Fungsi helper (menghapus elemen daftar yang tidak memiliki jumlah kejadian utama dari bit yang diberikan):

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

Program utama:

Æ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 byte

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;}];

Tidak ada yang gila. Pada dasarnya saringan Eratosthenes yang dimodifikasi yang mengevaluasi keutamaan hitungan 0/1 dalam iterasi yang sama dengan mencoret non-bilangan prima yang lebih tinggi. Dengan spasi putih:

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;
    }
  ];

Tapi hari ini saya belajar bahwa saya bisa memasukkan continueoperator ternary dan Haxe bahkan tidak keberatan.

Sunting: +2 karena nmerupakan batas atas yang inklusif!


Hei, nini inklusif.
Gurupad Mamadapur

@GurupadMamadapur Anda benar, tetap!
Aurel Bílý

2

Utilitas Bash + GNU, 129 126 123 114 111 109 byte

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

Cobalah online!

Memperhatikan komentar bahwa output tidak harus dalam urutan meningkat - mencukur 3 byte dengan menghitung mundur, bukan menghitung.

Grep diganti dengan wc untuk menghemat 3 byte tambahan.

Dieliminasi variabel (off 9 byte lebih).

Mengubah cara faktor digunakan - 3 byte lebih.

Membuatnya golf dengan seq (2 byte).


2

Python, 172 170 168 159 154 133 130 byte

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

Penggunaan: Panggil fungsi lambda anonim.
Metode pmemeriksa apakah suatu bilangan prima


Disimpan 2 + 2 + 9 = 13 bytes berkat Gurupad Mamadapur
Tersimpan 5 bytes berkat mbomb007


1
Anda dapat menyimpan 2 lebih banyak dengan menggunakan ini v-def v(n):a=bin(n)[2:];return p(n)and(p(a.count('1'))and p(a.count('0')))
Gurupad Mamadapur

1
Yang jauh lebih pendek -v=lambda a:p(a)and all(p(bin(a)[2:].count(x))for x in['1','0'])
Gurupad Mamadapur

2
String bisa diubah. Jadi bisa digunakan for x in'01'.
mbomb007

1

Pyke, 21 byte

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

Coba di sini!

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

Groovy, 120 byte

p={x->(2..<x).every{x%it!=0}&x>1|x==2}
{x->(1..x).findAll({y->p(y)&'10'.every{p(Integer.toBinaryString(y).count(it))}})}

Ini adalah penutupan tanpa nama.

Coba di sini!



1

Python 3 , 97 byte

def f(n,k=2,m=1,p={0}):f(n-1,k+1,m*k*k,p^{m%k*k,{*map(bin(m%k%n*k)[2:].count,'01')}<p==print(k)})

Ini adalah algoritma yang sama dengan jawaban Python 2 saya , tetapi implementasinya sangat berbeda. Fungsi mencetak ke STDOUT dan berakhir dengan kesalahan.

Cobalah online!


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


Fungsi tes primality itu ... luar biasa :-) Apakah Anda membuatnya sendiri?
ETHproduk

@ETHproductions Anda pernah melihatnya sebelum codegolf.stackexchange.com/a/91309/11182 dimodifikasi dari sini. Saya juga meminjam kode penghitungan 1 dan 0 Anda (menghirup apa pun yang bisa saya buat) tetapi sayangnya saya tidak bisa mengalahkan jumlah byte Anda.
George Reith

@ ETHproduk Bagus, terima kasih! Merupakan artefak dari versi sebelumnya
George Reith

1

MATLAB, 50 byte

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

1

Haxe, 158 147 byte

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

Output ke STDOUT dan berakhir pada kesalahan "terlalu banyak rekursi"; panggilan dengan mis f(1000);. Anda dapat menggunakan whileloop tanpa kesalahan untuk 156 byte:

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--;}};

Menggunakan rentang ternyata tiga byte lebih lama:

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;}};

Uji secara online!


1

Rust, 147 byte

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

tautan taman bermain

Metode count_ones,, count_zerosdan leading_zerosmetode berguna.

Versi terformat

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 byte

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

Variasi jawaban b2gills ' , menggunakan operator & persimpangan untuk efek besar.

Cobalah online!

Bagaimana itu bekerja

{                                                }  # 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! :)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.