Các số nguyên tố có số bit chính


23

Bài tập

Tìm tất cả các số nguyên không âm lên đến và bao gồm một số nguyên dương n khác không , là số nguyên tố và số 1's0'strong biểu diễn nhị phân của chúng (không có số 0 đứng đầu) cũng là số nguyên tố.

Dưới đây là năm số nguyên tố đầu tiên như vậy,

17, 19, 37, 41, 79

10001, 10011, 100101, 101001, 1001111

Làm rõ và quy tắc

  • Các phương thức I / O mặc định được chấp nhận .
  • Câu trả lời có thể là một chương trình hoặc một chức năng.
  • Nếu không có số nguyên tố như vậy thì đầu ra rác hoặc không có gì.
  • Sơ hở tiêu chuẩn bị cấm.
  • 2 3 5 7đã không lọt vào danh sách vì trong số đại diện nhị phân của chúng xuất hiện 0's1'skhông phải là số nguyên tố. Xem xét 7biểu diễn nhị phân của ai 111, ở đây 0xảy ra 0 lần và 0 không phải là số nguyên tố.
  • Xây dựng được cho phép.

  • Mã ngắn nhất tính bằng byte thắng!

Các trường hợp thử nghiệm

10
[]

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

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


1
Bạn yêu cầu tất cả các số nguyên tố dưới một n cho trước, nhưng bạn cũng nói bao gồm. Ý bạn là gì
Riley

@Riley Những gì tôi có nghĩa là ... all the numbers from 1....n. Tôi không biết làm thế nào để viết lại nó một cách đơn giản.
Gurupad Mamadapur


3
@ mbomb007 Rõ ràng, đối với bất kỳ thứ tự tổng số thứ tự nào, chuỗi số nguyên không quan tâm nhỏ nhất sẽ rất thú vị và do đó xứng đáng được đưa vào OEIS. Ergo, OEIS chứa tất cả các chuỗi số nguyên, bất kỳ mối quan tâm thực sự hoặc tưởng tượng :-)
Idillotexist Idonotexist

9
Tôi đang tự hỏi liệu Mathicala có chứa nhiều nội dung hơn OEIS có trình tự không ...
Neil

Câu trả lời:


5

Thạch , 14 13 byte

RBċþd`ÆPPTfÆR

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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
d`​Thủ thuật đó là một thứ khác ...
Sản phẩm ETH

10

Con trăn 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()

Hãy thử trực tuyến!

Lý lịch

Để xác định các số nguyên tố, chúng tôi sử dụng một hệ quả của định lý Wilson :

hệ quả của định lý Wilson

Làm thế nào nó hoạt động

Chúng tôi bắt đầu bằng cách khởi tạo km1p là tập {0} . Lưu ý rằng m = 1 = 0! ² = (k - 1)! ² . Ngay sau đó, đoạn mã sau được thực thi n lần, trong đó n là số nguyên đọc từ đầu vào tiêu chuẩn.

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

Theo hệ quả, m% k sẽ là 1 nếu k là số nguyên tố và 0 nếu không. Do đó, {m%k*k,0}sẽ trả về tập {k, 0} nếu k là số nguyên tố và tập {0} nếu không.

Nếu (và chỉ nếu) k là số nguyên tố, vì p không thể chứa k tại thời điểm này, sự khác biệt đối xứng tại chỗ p^={m%k*k,0}sẽ thêm k vào tập p . Ngoài ra, p sẽ chứa 0 sau khi cập nhật khi và chỉ khi nó không chứa 0 trước, vì vậy 0 ∊ p khi và chỉ khi k chẵn.

Trên cùng một dòng, chúng ta định nghĩa một hàm c thông qua c=bin(k).count, sẽ tính các lần xuất hiện của đối số của nó trong biểu diễn nhị phân của k .

Dòng thứ hai tạo ra đầu ra thực tế. {k,c('1'),c('0')-1}trả về tập hợp bao gồm chính k , số bit được đặt trong k và số bit không đặt trong k . Vì đầu ra bin(k)bắt đầu bằng 0b , chúng tôi phải giảm c('0')dần để chiếm 0 .

Nếu tất cả chúng đều là số nguyên tố, tất cả chúng sẽ thuộc về p , mà bây giờ chứa tất cả các số nguyên tố lên đến k (và có khả năng là 0 ). Nếu k là số Mersenne (nghĩa là, nếu nó chỉ đặt bit), c('0')-1sẽ mang lại 0 . Vì số Mersenne là số lẻ nên p sẽ không chứa 0 , do đó điều kiện sẽ không thành công.

Sau khi (có khả năng) in k , chúng tôi nhân m với . Vì m = (k-1)! ² trước khi cập nhật, m = k! ² sau nó. Sau khi tăng k , mối quan hệ m = (k-1)! ² giữ lại và chúng tôi đã sẵn sàng cho lần lặp tiếp theo.


9

Toán học, 80 68 54 byte

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

Giải trình

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

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

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

Bạn không thực sự cần phải vượt qua đệ quy a. Chỉ cần khởi tạo nó trong cuộc gọi ban đầu đến G. (Điều đó sẽ tiết kiệm 4 byte.)
Arnauld

@Arnauld ồ, cảm ơn! Điều này thật thú vị :-)
ETHproductions

1
Wow điều này đã giảm rất nhiều. Làm tốt lắm
George Reith

6

Thạch , 17 16 byte

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

Hãy thử trực tuyến!

Làm sao?

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
À cảm ơn, tôi thấy bạn đã thay đổi điều đó, điều đó sẽ tiết kiệm một byte.
Jonathan Allan

1
Bạn đã có bảng chữ cái đi, ở đó. ẠBÇЀfĠ...
mbomb007

2
@ mbomb007 Vâng, LƵ;Pbit luôn làm tôi bối rối.
Jonathan Allan

6

05AB1E , 14 byte

ƒNpNbSD_‚OpP&–

Hãy thử trực tuyến!

Giải trình

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

Tôi vẫn không thể tìm ra cách sử dụng , thử thách này có vẻ tốt cho nó, nhưng lâu hơn:FNb{.¡€gpONp+3QiN}})
Bạch tuộc ma thuật Urn

@carusocomputing: Tôi cũng có một giải pháp tương tự tôi đã xem xét, nhưng nó cũng kết thúc lâu hơn một chút so với điều này.
Emigna


4

MATL , 16 15 byte

:"@tB!t~hshZp?@

Hãy thử trực tuyến!

:         % 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 mã + -nl cờ.

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

Để chạy nó:

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

Một số giải thích ngắn
$r giữ regex kiểm tra nguyên tố cổ điển ( q/^1?$|^(11+)\1+$/).
Đối với tất cả các số từ 2 đến đầu vào,
(1x$@)!~$rkiểm tra xem số đó có phải là số nguyên tố hay không,
y/01/1/dr!~$rkiểm tra xem số 0trong biểu diễn nhị phân có phải là số nguyên tố hay không,
s/0//gr!~$rkiểm tra xem số 1trong biểu diễn nhị phân có phải là số nguyên tố hay không.
(nếu 3 điều kiện được đáp ứng, print$@in nó).


Cảm ơn đã giải thích. Khá tuyệt vời những gì bạn có thể làm với những gì về cơ bản là regex và một số logic :)
Emigna

@Emigna Cảm ơn! Các giải thích không chi tiết lắm (Tôi gặp khó khăn khi viết các giải thích dài hơn), nhưng có vẻ như nó là đủ cho bạn :) (Tôi vẫn tin rằng mã này hơi dài, nhưng tôi không biết cách lấy nó ngắn hơn, vì vậy nó ở đây)
Dada

1
Là một người không biết Perl, tôi đánh giá cao mọi lời giải thích tôi có thể nhận được. Nó sẽ không giúp tôi thực hiện chương trình Perl nhưng tôi hiểu một số lý do đằng sau phương pháp được sử dụng, điều này luôn thú vị.
Emigna

3

Python, 129 125 123 byte

Nếu chỉ có 0 là số nguyên tố ...

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

Dùng thử trực tuyến

Chức năng plà chức năng kiểm tra chính, có chức năng >0cuối cùng để nó hoạt động với giá trị 0, nếu không sẽ trả về -1. Lambda ẩn danh là lambda kiểm tra tất cả các điều kiện cần thiết.


Đây là một phương pháp hơi khác bằng cách sử dụng một bộ hiểu. Kết quả sẽ là một bộ. ( 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..$_}

Thử nó

Mở rộng:

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

Octave, 73 byte

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

Dùng thử trực tuyến!

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

Thuật toán đơn giản, sẽ chơi gôn hơn nữa.

EDIT: Quên n đã bao gồm.

Hãy thử trực tuyến!

Để giải trí, điều này rất giống nhau và cũng có 27 byte:

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

Giải trình

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

Thạch , 14 byte

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

Hãy thử trực tuyến!

Thật không may, tôi chỉ có thể liên kết với @Dennis, nhưng thuật toán có vẻ hơi khác nên tôi vẫn đăng bài này.

Giải trình

Hàm trợ giúp (xóa danh sách các phần tử không có số lần xuất hiện chính của một bit đã cho):

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

Chương trình chính:

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

Không có gì điên rồ. Về cơ bản, một sàng Eratosthenes đã được sửa đổi để đánh giá tính nguyên thủy của số 0/1 trong cùng một lần lặp khi bỏ qua các số nguyên tố không cao hơn. Với một số khoảng trắng:

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

Nhưng hôm nay tôi đã học được rằng tôi có thể đưa continuevào một nhà điều hành ternary và Haxe thậm chí không bận tâm.

Chỉnh sửa: +2 vì nlà giới hạn trên bao gồm!


Này, nbao gồm.
Gurupad Mamadapur

@GurupadMamadapur Bạn nói đúng, đã sửa!
Aurel Bílý

2

Tiện ích 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

Hãy thử trực tuyến!

Nhận thấy nhận xét rằng đầu ra không nhất thiết phải tăng theo thứ tự - loại bỏ 3 byte bằng cách đếm ngược thay vì đếm ngược.

Thay thế grep bằng wc để lưu thêm 3 byte.

Loại bỏ một biến (tắt thêm 9 byte).

Thay đổi hệ số được sử dụng - thêm 3 byte.

Làm cho nó trở nên golfier với 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')]

Cách sử dụng: Gọi hàm lambda ẩn danh
Phương thức pkiểm tra xem một số có phải là số nguyên tố không


Đã lưu 2 + 2 + 9 = 13 byte nhờ Gurupad Mamadapur
Đã lưu 5 byte nhờ mbomb007


1
Bạn có thể tiết kiệm thêm 2 bằng cách sử dụng cái này v-def v(n):a=bin(n)[2:];return p(n)and(p(a.count('1'))and p(a.count('0')))
Gurupad Mamadapur

1
Một cái ngắn hơn nhiều -v=lambda a:p(a)and all(p(bin(a)[2:].count(x))for x in['1','0'])
Gurupad Mamadapur

2
Chuỗi có thể lặp lại. Vì vậy, bạn có thể sử dụng for x in'01'.
mbomb007

1

Pyke, 21 byte

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

Hãy thử nó ở đây!

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


Chức năng kiểm tra tính nguyên thủy đó là ... thật tuyệt vời :-) Bạn có tự tạo nó không?
Sản phẩm ETH

@ETHproductions Bạn đã nhìn thấy nó trước codegolf.stackexchange.com/a/91309/11182 được sửa đổi từ đây. Tôi cũng đã mượn mã đếm 1 và 0 của bạn (đã xử lý bất cứ điều gì tôi có thể đưa ra) nhưng than ôi tôi không thể đánh bại số byte của bạn.
George Reith

@ETHproductions Bắt tốt cảm ơn! Là vật phẩm của phiên bản trước
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);};

Xuất ra STDOUT và chấm dứt lỗi "đệ quy quá nhiều"; gọi với ví dụ f(1000);. Bạn có thể sử dụng một whilevòng lặp không có lỗi cho 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--;}};

Sử dụng một phạm vi hóa ra ba byte dài hơn:

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

Kiểm tra nó trực tuyến!


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

liên kết sân chơi

các count_ones,count_zerosleading_zeroscác phương pháp có ích.

Phiên bản định dạng

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..$_}

Sự thay đổi câu trả lời của b2gills , sử dụng & đường giao nhau toán tử để có hiệu quả tuyệt vời.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

{                                                }  # 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! :)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.