ค้นหาประมุข!


20

เอมิรัลนั้นเป็นไพรเมอร์ที่ไม่ใช่พาลินโดรมิกซึ่งเมื่อกลับกันก็จะเป็นไพร์มด้วยเช่นกัน

รายชื่อของฐาน 10 emirps ที่สามารถพบได้ในOEIS หกคนแรกคือ:

13, 17, 31, 37, 71, 73

อย่างไรก็ตามเนื่องจากกฎการกลับรายการ emirps จะแตกต่างกันในแต่ละฐาน ตัวอย่างเช่น emirps ไบนารีหกตัวแรกคือ:

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

... และในฐานสิบหกพวกเขาคือ:

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

เรื่องสนุก: ไม่มีเอมิเรตในเอกภาพเพราะตัวเลขทุกตัวเป็นโทนสี


ความท้าทาย

งานของคุณคือการสร้างฟังก์ชั่น (หรือโปรแกรมเต็มรูปแบบ) ซึ่งจะใช้เวลาสองพารามิเตอร์ และและสร้างรายชื่อของแรก emirps ในฐานขnbnb

กฎ / รายละเอียด:

  • nและมีทั้งจำนวนเต็มบวกขนาดใหญ่กว่า0b0
  • คุณสามารถสมมติ : กล่าวคือฐานจะอยู่ระหว่างเลขฐานสองและเลขฐานสิบหก2b16
  • คุณควรจะสามารถที่จะคำนวณค่าของถึง~n100 100
  • รายการที่สร้างสามารถอยู่ในฐานหรือฐานจำนวนเต็มมาตรฐานของภาษาของคุณตราบใดที่คุณระบุไว้ในคำตอบของคุณb
  • ไม่อนุญาตให้ใช้การตรวจสอบ builtin emirp (การทดสอบ primin แบบบิวด์อินใช้ได้)
  • คุณไม่สามารถเขียนโค้ด emirps หรืออ่านจากไฟล์ภายนอกใด ๆ ได้
  • ช่องโหว่มาตรฐานถูกแบนเช่นเคย
  • นี่คือดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ

กรณีทดสอบ

สำหรับกรณีทดสอบแต่ละรายการฉันได้รวมรายการไว้ในฐานbและฐาน 10 รายการที่เทียบเท่าแล้ว

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] 

คุณสามารถทดสอบโปรแกรมของคุณกับตัวอย่าง Python ของฉัน (ungolfed) ที่repl.it

คำตอบ:


6

เยลลี่ขนาด 16 ไบต์

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

TryItOnline!

อย่างไร?

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

* หมายเหตุbในฐานbคือ[1,0]ซึ่งเมื่อย้อนกลับ[0,1]ซึ่งเป็น1ซึ่งไม่ได้สำคัญ; อะไรที่น้อยกว่าbหนึ่งหลักในฐานbและดังนั้นจึงเป็น palindromic


ขอแสดงความยินดีกับการชนะ!
FlipTack

8

05AB1E , 17 ไบต์

ใช้การเข้ารหัสCP-1252

ลำดับอินพุตคือn, b
เอาต์พุตอยู่ในฐาน -10

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

ลองออนไลน์!

คำอธิบาย

                    # 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

Mathematica, 70 ไบต์

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

ผลงานและ0 <= n <= 100 2 <= b <= 16จากรายการPrime@Range@437แรก437เฉพาะหาCases pที่IntegerReverse rของpฐาน#2ไม่เท่ากับpและยังเป็นนายกแล้วใช้ครั้งแรกดังกล่าว#p

ต่อไปนี้เป็นโซลูชัน 95 ไบต์ที่ใช้งานได้เองn>=0และb>=2:

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

IntegerReverse+1 แน่นอน! ดี
DavidC

79 ไบต์สำหรับโซลูชัน arbitrary-nb; 77 ไบต์หากReapได้รับอนุญาตในส่วนท้าย:For[i=j=0,j<#,If[(r=IntegerReverse[p=Prime@++i,#2])!=p&&PrimeQ@r,j++;Sow@p]]&
โรมัน

3

Perl, 262 ไบต์

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

อ่านได้:

($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แปลงจำนวนที่กำหนดเป็นฐาน$bและdแปรรูปจำนวนที่กำหนดจากฐาน$bกลับเข้ามาในทศนิยมโดยการหาหมายเลขแรกซึ่งผลตอบแทนที่กล่าว base- จำนวนเมื่อผ่านไป$b cการวนรอบนั้นจะตรวจสอบว่าเป็น palindrome หรือไม่และถ้าทั้งสองหมายเลขนั้นสำคัญโดยใช้คอมโพสิต regex


3

Mathematica 112 ไบต์

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

ตัวอย่าง

ค้นหา 10 Emips แรกในฐานสิบหก; คืนค่าเป็นทศนิยม

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}

Ungolfed

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

Python 3 , 232 214 191 188 ไบต์

p=lambda n:all(n%i for i in range(2,n))
def f(b,n):
 s=lambda n:(''if n<b else s(n//b))+f'{n%b:X}';l=[];i=3
 while n:i+=1;c=s(i);d=c[::-1];a=(c!=d)*p(i)*p(int(d,b));l+=[c]*a;n-=a
 return l

ลองออนไลน์!



รับได้สวย! นำลงไปที่191 ไบต์
movatica

เป็นคนที่ดี @ Joing!
movatica

2

C, 293 286 261 ไบต์

ปรับปรุงโดย@ceilingcat , 261 ไบต์:

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

ลองออนไลน์!

(บุคคลนี้เป็นเหมือนการติดตามฉันอย่างต่อเนื่องรอบ PPCG และปรับปรุงเนื้อหาของฉันในความคิดเห็นและทันทีที่ฉันตอบขอบคุณเขาเขาเพิ่งลบความคิดเห็นและหายไปฮ่า ๆ Welp ขอบคุณอีกครั้ง!)


ปรับปรุงโดย@movaticaขนาด 286 ไบต์:

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

ลองออนไลน์!


คำตอบเดิมของฉัน 293 ไบต์:

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

รวบรวมและทำงานด้วยgcc emirp.c -o emirp -lm ./emirp <b> <n>พิมพ์ emirps ที่คั่นด้วยช่องว่างใน base-10


@FlipTack คุณพูดถูก ฉันจะต้องแก้ไขพรุ่งนี้
OverclockedSanic

@FlipTack แก้ไขและทดสอบเพื่อให้แน่ใจว่าผ่านการทดสอบของคุณ เป็นสิ่งที่ดีหรือไม่?
OverclockedSanic

แน่นอน! และยินดีต้อนรับสู่โค้ดกอล์ฟ
FlipTack

1
เยี่ยมมาก! ฉันย้ายผู้ให้บริการที่เพิ่มขึ้นเพื่อพาคุณไปที่286
movatica

1
@movatica ยอดเยี่ยม! ฉันเพิ่มการปรับปรุงของคุณในคำตอบของฉัน ขอบคุณ!
OverclockedSanic

1

JavaScript (ES6), 149 148 141 140 ไบต์

ส่งคืนรายการ emirps ที่คั่นด้วยช่องว่างในฐาน b (อาจสั้นกว่า 2 ไบต์โดยส่งคืนรายการทศนิยมแทน)

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

กรณีทดสอบ



0

APL (NARS), 87 ตัวอักษร, 174 ไบต์

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

ผลลัพธ์จะอยู่ในฐาน 10 การทดสอบและผลลัพธ์:

  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+⍺⍟⍵)⊤⍵}จะทำการแปลงในฐานผลอาร์เรย์จำนวนเต็ม; 0π⍵จะกลับมาเป็นจริง [1] ถ้าเป็นนายกอื่นมันจะกลับ 0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.