Tìm Tiểu vương quốc!


20

Một emirp là một số nguyên tố không palindromic , khi đảo ngược, cũng là số nguyên tố.

Danh sách các tiểu vương 10 cơ sở có thể được tìm thấy trên OEIS . Sáu đầu tiên là:

13, 17, 31, 37, 71, 73

Tuy nhiên, do quy tắc đảo ngược, các tiểu vương quốc khác nhau ở mỗi cơ sở. Ví dụ: sáu tiểu sử nhị phân đầu tiên là:

Bin  | 1011, 1101, 10111, 11101, 101001, 100101
Dec  | (11 , 13  , 23   , 29   , 37    , 41   ) 

... Và trong thập lục phân, chúng là:

Hex |  17, 1F, 35, 3B, 3D, 53
Dec | (23, 31, 53, 59, 61, 83)

Fun Fact: không có emirps trong unary như mỗi số là một palindrome.


Các thách thức

Nhiệm vụ của bạn là tạo một hàm (hoặc chương trình đầy đủ) có hai tham số và và tạo danh sách emirps đầu tiên trong cơ sở .nbnb

Quy tắc / Chi tiết:

  • n và đều là các số nguyên dương lớn hơn .b0
  • Bạn có thể giả sử : có nghĩa là, cơ sở sẽ nằm giữa nhị phân và thập lục phân.2b16
  • Bạn sẽ có thể tính toán các giá trị của lên tới .n100 100
  • Danh sách được tạo có thể ở cơ sở hoặc cơ sở số nguyên tiêu chuẩn của ngôn ngữ của bạn, miễn là bạn chỉ định điều này trong câu trả lời của mình.b
  • Kiểm tra emirp dựng sẵn không được phép (các thử nghiệm nguyên thủy dựng sẵn là tốt)
  • Bạn không thể mã hóa các tiểu vương hoặc đọc từ bất kỳ tệp bên ngoài nào.
  • Lỗ hổng tiêu chuẩn bị cấm, như mọi khi.
  • Đây là , vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.

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

Đối với mỗi trường hợp thử nghiệm, tôi đã bao gồm danh sách trong cơ sở bvà 10 tương đương cơ sở của nó.

B = 2, N = 10

BIN: [1011, 1101, 10111, 11101, 100101, 101001, 101011, 101111, 110101, 111101]
DEC: [11, 13, 23, 29, 37, 41, 43, 47, 53, 61] 


B = 3, N = 5

BASE3: [12, 21, 102, 201, 1011]
DEC:   [5, 7, 11, 19, 31]


B = 12, N = 7

BASE12: [15, 51, 57, 5B, 75, B5, 107]
DEC: [17, 61, 67, 71, 89, 137, 151]


B = 16, N = 4

HEX: [17, 1F, 35, 3B]
DEC: [23, 31, 53, 59] 

Bạn có thể kiểm tra chương trình của mình hơn nữa với ví dụ Python (chưa được xử lý) của tôi trên repl.it

Câu trả lời:


6

Thạch , 16 byte

bµU,ḅ⁹QÆPḄ=3
⁸ç#

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

Làm sao?

bµU,ḅ⁹QÆPḄ=3 - Link 1, in-sequence test: n, b
b            - convert n to base b - a list
 µ           - monadic chain separation
  U          - reverse the list
   ,         - pair with the list
     ⁹       - link's right argument, b
    ḅ        - convert each of the two lists from base b
      Q      - get unique values (if palindromic a list of only one item)
       ÆP    - test if prime(s) - 1 if prime, 0 if not
         Ḅ   - convert to binary
          =3 - equal to 3? (i.e. [reverse is prime, forward is prime]=[1,1])

⁸ç# - Main link: b, N
  # - count up from b *see note, and find the first N matches (n=b, n=b+1, ...) for:
 ç  - last link (1) as a dyad with left argument n and right argument
⁸   - left argument, b

* Lưu ý btrong cơ sở b[1,0], mà khi đảo ngược là [0,1]cái 1không phải là số nguyên tố; bất cứ điều gì ít hơn blà một chữ số trong cơ sở bvà do đó palindromic.


Chúc mừng chiến thắng!
FlipTack

8

05AB1E , 17 byte

Sử dụng mã hóa CP-1252 .

Thứ tự đầu vào là n, b
Đầu ra nằm trong cơ sở-10.

µN²BÂD²öpŠÊNpPD–½

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

Giải trình

                    # implicit input a,b
µ                   # loop until counter is a
 N²B                # convert current iteration number to base b
    ÂD              # create 2 reversed copies
      ²ö            # convert one reversed copy to base 10
        p           # check for primality
         ŠÊ         # compare the normal and reversed number in base b for inequality
           Np       # check current iteration number for primality
             P      # product of all
              D     # duplicate
               –    # if 1, print current iteration number
                ½   # if 1, increase counter

4

Toán học, 70 byte

Cases[Prime@Range@437,p_/;(r=p~IntegerReverse~#2)!=p&&PrimeQ@r]~Take~#&

Hoạt động cho 0 <= n <= 1002 <= b <= 16. Từ danh sách Prime@Range@437những người đầu tiên 437số nguyên tố, tìm ra Cases pnơi IntegerReverse rcác ptrong cơ sở #2không phải là bằng pvà cũng là số nguyên tố, sau đó đi đầu tiên #như vậy p.

Đây là một giải pháp 95 byte hoạt động tùy ý n>=0b>=2:

(For[i=1;a={},Length@a<#,If[(r=IntegerReverse[p=Prime@i,#2])!=p&&PrimeQ@r,a~AppendTo~p],i++];a)&

+1 IntegerReverse. Tất nhiên! Tốt đẹp.
DavidC

79 byte cho giải pháp tùy ý-nb; 77 byte nếu Reaping được cho phép ở chân trang:For[i=j=0,j<#,If[(r=IntegerReverse[p=Prime@++i,#2])!=p&&PrimeQ@r,j++;Sow@p]]&
Roman

3

Perl, 262 byte

($b,$n)=@ARGV;$,=',';sub c{my$z;for($_=pop;$_;$z=(0..9,a..z)[$_%$b].$z,$_=($_-$_%$b)/$b){};$z}sub d{my$z;for(;c(++$z)ne@_[0];){}$z}for($p=2;@a<$n;$p++){$r=qr/^1?$|^(11+?)\1+$/;(c($p)eq reverse c$p)||((1x$p)=~$r)||(1x d($x=reverse c($p)))=~$r?1:push@a,c($p);}say@a

Có thể đọc được

($b,$n)=@ARGV;
$,=',';
sub c{
    my$z;
    for($_=pop;$_;$z=(0..9,a..z)[$_%$b].$z,$_=($_-$_%$b)/$b){};
    $z
}
sub d{
    my$z;
    for(;c(++$z)ne@_[0];){}
    $z
}
for($p=2;@a<$n;$p++){
    $r=qr/^1?$|^(11+?)\1+$/;
    (c($p)eq reverse c$p)||((1x$p)=~$r)||(1x d($x=reverse c($p)))=~$r?1:push@a,c($p)
}
say@a

cchuyển đổi một số đã cho thành cơ sở $bdchuyển đổi một số đã cho từ cơ sở $btrở lại thành số thập phân bằng cách tìm số đầu tiên trả về $bsố cơ sở đã nói khi được chuyển đến c. Vòng lặp for sau đó kiểm tra xem đó có phải là một bảng màu hay không và nếu cả hai số đều là số nguyên tố bằng cách sử dụng biểu thức tổng hợp.


3

Toán học 112 byte

Cases[Table[Prime@n~IntegerDigits~#2,{n,500}],x_/;x!=(z=Reverse@x)&&PrimeQ[z~(f=FromDigits)~#2]:>x~f~#2]~Take~#&

Thí dụ

Tìm 10 Emips đầu tiên trong hex; trả lại chúng trong số thập phân.

Cases[Table[Prime@n~IntegerDigits~#2, {n, 500}], 
x_ /; x != (z = Reverse@x) && PrimeQ[z~(f = FromDigits)~#2] :> x~f~#2]~Take~# &[10, 16]


{23, 31, 53, 59, 61, 83, 89, 113, 149, 179}

Ung dung

Take[Cases[                                             (* take #1 cases; #1 is the first input argument *)
   Table[IntegerDigits[Prime[n], #2], {n, 500}],        (* from a list of the first 500 primes, each displayed as a list of digits in base #2 [second argument] *) 
   x_ /;                                                (* x, a list of digits, such that *)
   x != (z = Reverse[x]) && PrimeQ[FromDigits[z, #2]]   (* the reverse of the digits is not the same as the list of digits; and the reverse list, when composed, also constitutes a prime *)
   :> FromDigits[x, #2]],                               (* and return the prime *)
   #1] &                                                (* [this is where #1 goes, stating how many cases to Take] *)

2

Perl 6 , 91 byte

->\n,\b{(grep {.is-prime&&{$_ ne.flip &&.parse-base(b).is-prime}(.base(b).flip)},1..*)[^n]}

Trả về danh sách các tiểu vương trong cơ sở 10.




2

C, 293 286 261 byte

Được cải thiện bởi @ceilingcat , 261 byte:

v,t,i,j,c,g,s[9],r[9],b;main(n,a)int**a;{for(b=n=atoi(a[1]);g^atoi(a[2]);t|v|!wcscmp(s,r)||printf("%u ",n,++g)){i=j=0;for(c=++n;s[i]=c;c/=b)s[i++]=c%b+1;for(;r[j]=i;)r[j++]=s[--i];p(n);for(t=v;r[i];)c+=~-r[i]*pow(b,i++);p(c);}}p(n){for(j=1,v=0;++j<n;n%j||v++);}

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

(Người này giống như liên tục theo dõi tôi xung quanh PPCG và cải thiện nội dung của tôi trong các bình luận, và ngay khi tôi trả lời cảm ơn, anh ấy chỉ xóa bình luận và biến mất lol. Welp, cảm ơn lần nữa!)


Được cải thiện bởi @movatica , 286 byte:

u,v,t,i,j,c,n,g;main(int x,char**a){char s[9],r[9],b=n=atoi(a[1]);x=atoi(a[2]);for(;g^x;){i=j=0;for(c=++n;c;c/=b)s[i++]=c%b+1;s[i]=c=0;for(;i;r[j++]=s[--i]);r[j]=0;p(n);t=v;for(;r[i];)c+=(r[i]-1)*pow(b,i++);p(c);t|v|!strcmp(s,r)?:printf("%u ",n,++g);}}p(n){for(u=1,v=0;++u<n;n%u?:v++);}

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


Câu trả lời ban đầu của tôi, 293 byte:

u,v,t,i,j,c,n,g;main(int x,char**a){char s[9],r[9],b=n=atoi(a[1]);x=atoi(a[2]);for(++n;g^x;++n){i=j=0;for(c=n;c;c/=b)s[i++]=c%b+1;s[i]=c=0;for(;i;r[j++]=s[--i]);r[j]=0;p(n);t=v;for(--i;r[++i];)c+=(r[i]-1)*pow(b,i);p(c);t|v|!strcmp(s,r)?:printf("%u ",n,++g);}}p(n){for(u=1,v=0;++u<n;n%u?:v++);}

Biên dịch với gcc emirp.c -o emirp -lmvà chạy với ./emirp <b> <n>. In các emirps phân tách không gian trong cơ sở-10.


@FlipTack Bạn nói đúng. Tôi sẽ phải sửa nó vào ngày mai.
OverclockedSanic

@FlipTack Đã sửa và kiểm tra để đảm bảo nó vượt qua các bài kiểm tra của bạn. Cái này tốt không?
Ép xungSanic

Chắc chắn là! Và chào mừng bạn đến mã golf.
FlipTack

1
Công việc tốt đẹp! Tôi đã chuyển một số toán tử gia tăng để đưa bạn xuống còn 286
Movatica

1
@movatica Tuyệt vời! Tôi đã thêm những cải tiến của bạn vào câu trả lời của tôi. Cảm ơn!
Ép xungSanic

1

JavaScript (ES6), 149 148 141 140 byte

Trả về một danh sách các tiểu vương được phân tách bằng dấu cách trong cơ sở b. (Có thể ngắn hơn 2 byte bằng cách trả về danh sách thập phân thay thế.)

f=(b,n,i=2)=>n?((p=(n,k=n)=>--k<2?k:n%k&&p(n,k))(i)&p(k=parseInt([...j=i.toString(b)].reverse().join``,b))&&k-i&&n--?j+' ':'')+f(b,n,i+1):''

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


1

Python 2 , 133 byte

p=lambda n:all(n%i for i in range(2,n))
b,n=input()
i=b
while n:
 j=i=i+1;r=0
 while j:r=r*b+j%b;j/=b
 if(i-r)*p(i)*p(r):print i;n-=1

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

Xuất ra mỗi số trên một dòng mới, trong cơ sở 10


0

APL (NARS), 87 ký tự, 174 byte

r←a f w;i
i←1⋄r←⍬
→2×⍳∼{∼0π⍵:0⋄k≡v←⌽k←{(a⍴⍨⌊1+a⍟⍵)⊤⍵}⍵:0⋄0πa⊥v:1⋄0}i+←1⋄r←r,i⋄→2×⍳w>≢r

Kết quả sẽ ở cơ sở 10. Kiểm tra và kết quả:

  3 f 1
5 
  2 f 10
11 13 23 29 37 41 43 47 53 61 
  3 f 5
5 7 11 19 31 
  12 f 7
17 61 67 71 89 137 151 
  16 f 4
23 31 53 59 

{(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}sẽ thực hiện chuyển đổi trong cơ sở , kết quả số nguyên mảng; 0π⍵sẽ trả về true [1] nếu là số nguyên tố khác, nó sẽ trả về 0.

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.