Palindromic Primes ที่ไม่มี 11


14

ทุก palindrome ที่มีจำนวนคู่จะหารด้วย 11 ดังนั้น 11 จึงเป็น [palindromic prime] เดียวที่มีตัวเลขเป็นเลขคู่ - David Wasserman, OEIS

ฉันเรียนรู้สิ่งนี้ด้วยตนเองในวันนี้ก่อนที่ฉันจะทำการวิจัยของฉันเมื่อโปรแกรมของฉันข้ามตัวเลขด้วยจำนวนเลขคู่ (ยกเว้น 11) เมื่อคำนวณจำนวนพาลมาโดมิก งานของคุณ: สร้างโปรแกรมหรือฟังก์ชั่นที่เมื่อได้รับอินพุตจำนวนเต็ม N แล้วจะส่งออกคำศัพท์ที่ N ใน Palindromic Sequence ™ของ Stephen

Palindromic Sequence ™ของสตีเฟ่น

Palindromic Sequence ™ของสตีเฟ่นเริ่มต้นด้วย 11 และดำเนินการต่อด้วยการหารด้วยpalindromic semiprimes 11 โดยพื้นฐานแล้ว semiprimes ทั้งหมดที่จะเป็นค่าเฉพาะหาก 11 ไม่ได้ "นับ" คว่ำคือรายการนี้มีตัวเลขที่มีจำนวนหลัก! เย้. และตัวเลขจำนวนมากที่มีตัวเลขคี่จะถูกข้ามไปเนื่องจากมันเป็นจำนวนเฉพาะ

จุดเริ่มต้นของลำดับ:

1   : 11
2   : 22
3   : 33
4   : 55
5   : 77
6   : 121
7   : 737
8   : 979
9   : 1111
10  : 1441
11  : 1661
12  : 1991
13  : 3113
14  : 3223
15  : 3443
16  : 3883
17  : 7117
18  : 7447
19  : 7997
20  : 9119
21  : 9229
22  : 9449
23  : 10901

* ถึง 1,331 (11 ^ 3) และคล้ายคลึงกันสอดคล้องกับจิตวิญญาณของลำดับนี้พวกเขาไม่สอดคล้องกับกฎ

กรณีทดสอบอีกต่อไป:

26  : 91619
31  : 103301
41  : 139931
51  : 173371
61  : 305503
71  : 355553
81  : 395593
91  : 725527
101 : 772277
127 : 997799
128 : 1099901
141 : 3190913
151 : 3739373
161 : 7589857
171 : 9460649
200 : 11744711
528 : 39988993

อินพุต

จำนวนเต็ม N,> = 1 คุณสามารถใช้ 0 ที่จัดทำดัชนี N (ให้แน่ใจว่าได้ปรับกรณีทดสอบ) ถ้าคุณระบุในคำตอบของคุณ ขึ้นบรรทัดใหม่ที่ได้รับอนุญาต

เอาท์พุต

เทอมที่ N ใน Palindromic Sequence ™ของสตีเฟ่น ขึ้นบรรทัดใหม่ที่ได้รับอนุญาต

กฎระเบียบ

  • อินพุต / โปรแกรมของคุณเท่านั้นที่สามารถทำได้คือ N โปรแกรมของคุณไม่สามารถดึงข้อมูลลำดับจาก OEIS ( ใช้ช่องโหว่มาตรฐานหรือที่รู้จัก)
  • คุณต้องสามารถพิมพ์ผลลัพธ์ได้สูงสุดหกหลัก (N = 127) เวลาไม่ใช่ปัจจัย - อย่างไรก็ตามหากโปรแกรม / ฟังก์ชั่นของคุณใช้งานได้เร็วมากคุณต้องพิสูจน์ว่าอัลกอริทึมทำงาน หากภาษาของคุณอนุญาตให้ใช้งานได้นานขึ้นคุณสามารถปล่อยให้มันขยายตามธรรมชาติได้สูงสุดหรือ จำกัด ไว้ที่สิบหลักตามที่คุณต้องการ เอาท์พุท / การเลิกใช้เกินขีด จำกัด ของคุณไม่สำคัญตราบใดที่ไม่ปรากฏว่าเป็นเอาต์พุตที่ถูกต้อง
  • ฟังก์ชั่นโปรแกรม / ฟังก์ชั่นเกี่ยวกับอินพุตที่ไม่ถูกต้องไม่เกี่ยวข้อง


7
ควรรวม 11 หรือไม่ ไม่ใช่ semiprime
xnor

1
@xnor 11 ถูกกำหนดให้เป็นจุดเริ่มต้นของลำดับ คุณถูกต้องว่ามันไม่ได้ semiprime แต่ 1 ไม่ได้เป็นจำนวนฟีโบนักชีโดยความหมายอย่างใดอย่างหนึ่ง :)
สตีเฟ่น

คำตอบ:


9

เยลลี่ , 18 13 ไบต์

ṬÆẸש11ŒḂµ#ṛ®

ด้วยเหตุผลบางอย่างนี่ช้ากว่าการแก้ไขครั้งแรกของฉันมากแม้ว่าจะทำแบบเดียวกันก็ตาม

ลองออนไลน์!

N = 127

dennis-home:~$ time jelly eun 'ṬÆẸש11ŒḂµ#ṛ®' <<< 127
997799

real    1m43.745s
user    1m43.676s
sys     0m0.113s

มันทำงานอย่างไร

ṬÆẸש11ŒḂµ#ṛ®  Main link. No arguments.

         µ     Combine all links to the left into a chain.
          #    Read an integer n from STDIN and call the chain monadically, with
               argument k = 0, 1, 2, ... until n values of k result in a truthy
               output. Return the array of all matching values of k.
Ṭ                Untruth; yield [0, 0, 0, ..., 1] (k-1 zeroes followed by a 1) or
                 [] if k = 0.
 ÆẸ              Unexponents; consider the resulting array as exponents of the
                 sequence of primes and yield the corresponding integer. For k = 0,
                 this yields 1. For k > 0, it yields the k-th prime.
   ש11          Multiply the result by 11 and copy the product to the register.
       ŒḂ        Test if the product is a palindrome.
           ṛ®  Replace the resulting array with the integer in the register.

15

Python 2 , 76 73 72 70 69 68 ไบต์

n=input();c=k=m=11
while n:m*=k/c;k+=c;n-=`k`==`k`[::~m%k-c]
print k

ขอบคุณ @WheatWizard สำหรับการตีกอล์ฟขนาด 3 ไบต์!

ขอบคุณ @ ØrjanJohansenสำหรับการเล่นกอล์ฟ 1 ไบต์!

ขอบคุณ @xnor และ @ ØrjanJohansenสำหรับการปูทางถึง 68 ไบต์!

อินพุตถูกทำดัชนี 0 ลองออนไลน์! หรือตรวจสอบกรณีทดสอบ 31 กรณีแรก

พื้นหลัง

จำได้ว่าวิลสันทฤษฎีบทระบุว่าสำหรับทุกจำนวนเต็มp> 1 ,

หมายความว่า(p - 1)! +1จะหารด้วยpถ้าเท่ากันถ้าpเป็นจำนวนเฉพาะ

ถ้าp> 1เป็นไม่ได้ที่สำคัญมันเป็นคอมโพสิต; ให้คิวเป็นหารสำคัญที่เล็กที่สุดของพี เห็นได้ชัดว่าคิว≤ P / q มีสองกรณี:

  • ถ้าq = P / qเรามีที่p =

    ถ้าq = 2 , (p - 1)! = 3! = 6ดังนั้น(p - 1)! เป็นสอดคล้องกัน2แบบโมดูโลพี

    ถ้าP / q = Q> 2ดังนั้น2q <p วิธีนี้qและ2qมีทั้ง1, …, p - 1 , ซึ่งผลิตภัณฑ์เป็น factorial ของp - 1ดังนั้น2p = 2q² = q · 2qหาร(p - 1)! อย่างเท่าเทียมกัน

  • ถ้าq <p / q , qและp / qเป็นทั้ง1, …, p - 1 , ดังนั้นp = q · p / qหาร(p - 1)! อย่างเท่าเทียมกัน

สรุป,

สำหรับทุกจำนวนเต็มp> 1

ทีนี้สำหรับความสอดคล้องจำนวนเต็มทั้งหมดและจำนวนเต็มa , bและcทั้งหมดมีค่าต่อไปนี้

เมื่อa = -1 , b = 11และc = -1เราทำตามนั้น

และเนื่องจาก21และ-23เป็นแบบโมดูโลที่สอดคล้องกัน44และ-1และ11p-1เป็นแบบโมดูโลที่สอดคล้องกัน11pเราจึงมาถึงข้อสรุปดังต่อไปนี้

สำหรับค่าที่เป็นไปได้ทั้งหมดของpผลลัพธ์ ( 11 , 21หรือ11p - 1 ) จะอยู่ในช่วง0, …, 11p - 1ดังนั้นค่าเหล่านี้จึงตรงกับค่าที่จะถูกส่งคืนโดย%ผู้ดำเนินการของ Python

มันทำงานอย่างไร

เราเริ่มต้น , kและม.ไป11หลังจากที่การประหยัดการป้อนข้อมูลในn cจะคงที่ตลอดเวลาที่เหลือของโปรแกรม เนื่องจากมีcเกิดขึ้นสามครั้งบนบรรทัดต่อไปนี้และกำหนดค่าใช้จ่ายcเพียงสองไบต์จึงบันทึกไบต์ kสามารถคิดได้11pโดยใช้ความหมายของpจากย่อหน้าก่อนหน้า เริ่มแรกแล้วk = 11 = 11 · 1! . mเข้าแทนที่11 · (p - 1)! ; เริ่มแรกm = 11 = 11 · 0! . kและmจะสนองความสัมพันธ์m = 11 · (k / 11)! ตลอดเวลา.

nแสดงถึงจำนวน“ palindromes ของสตีเฟ่น” ที่เราต้องค้นหา ตั้งแต่k = 11เริ่มแรกเราสามารถส่งออกkคำต่อคำโดยไม่ต้องคำนวณเพิ่มเติม อย่างไรก็ตามเมื่อnเป็นบวกเราจะเข้าสู่ while while ห่วงเริ่มต้นโดยการคูณเมตรโดยk / c = Pแล้วเพิ่ม11เพื่อkจึง incrementing พี ถ้าkเป็นสมาชิกลำดับเราจะลบ1จากnและเริ่มใหม่ เมื่อnถึง0เราพบสมาชิกลำดับที่ดัชนีที่ต้องการและแยกออกจากลูปแล้วพิมพ์ค่าสุดท้ายของk.

การแสดงออก

`k`==`k`[::~m%k-c]

ดำเนินการทดสอบจริงและมันของผล ( ทรู / 1สำหรับสมาชิกลำดับ0 / เท็จอย่างอื่น) ถูกลบออกจากn เท่าที่เห็นมาก่อน~ m% k = (-m - 1)% k = (-11 · (p - 1)! - 1)% 11pเท่ากับ10ถ้าpเป็นจำนวนเฉพาะ21ถ้าp = 4และ11p - 1 > 43ถ้าp> 4เป็นคอมโพสิต ดังนั้นหลังจากลบc = 11เราจะเหลือ-1สำหรับไพร์มพีและจำนวนเต็มบวกมากกว่า9อย่างอื่น

สำหรับนายกพี , ​`k`[::-1]จะช่วยให้เราเป็นตัวแทนสตริงของkกับการสั่งซื้อหลักกลับเพื่อเปรียบเทียบกับ​`k`​การตรวจสอบว่าkเป็นประโยค ถ้าเป็นเช่นนั้นเงื่อนไขทั้งหมดเป็นจริงและkเป็นสมาชิกลำดับ อย่างไรก็ตามถ้าpไม่ได้เป็นไพเราะช่วงที่มีขนาดใหญ่และความจริงที่ว่าkจะมีค่าเฉลี่ยมากกว่าหนึ่งหลักที่​`k`[::-1]ไม่สามารถมีจำนวนหลักที่เท่า​`k`​กันให้นับประสาเท่ากับ


4
ฉันต้องบอกว่าการทดสอบแบบดั้งเดิมของคุณนั้นยอดเยี่ยมจริงๆ ฉันไม่สามารถแข่งขันกับคำตอบนี้ได้
โพสต์ Rock Garf Hunter

2
สิ่งนี้มีแนวโน้ม แต่ข้ามไป 121.
xnor

@xnor มีการจัดการเพื่อรวม 121 ในราคาของไบต์พิเศษ ขอบคุณ!
เดนนิส

8

Brachylogขนาด 17 ไบต์

:I{11|ṗ×₁₁≜.↔}ᶠ⁽t

ลองออนไลน์!

นี่คือดัชนี 1

คำอธิบาย

:I{          }ᶠ⁽t    Find the Input'th result of the following:
   11                  Output = 11
     |                 Or
          ≜.           Output is an integer…
      ṗ×₁₁             …which is the result of multiplying a prime by 11…
           .↔          …and Output reversed is still the Output

การรับรู้สองแบบด้วยคำตอบนี้:

  • ฉันต้องแก้ไขความจริงที่ว่าการส่งตัวยกผ่านไปยัง metapredicates (ด้วย) ไม่ทำงานหากไม่มีอินพุตที่จะผ่าน (ซึ่งเป็นสาเหตุที่ฉันต้องเพิ่ม:I)
  • ฉันจำเป็นต้องเพิ่ม metapredicate เพื่อให้ได้Nผลลัพธ์ของเพรดิเคต (ซึ่งจะหลีกเลี่ยงการใช้ᶠ⁽tและแทนเช่นⁿ⁽)

การนำการเปลี่ยนแปลงทั้งสองมาใช้จะทำให้ได้คำตอบ 14 ไบต์


5

Mathematica, 65 60 ไบต์

n=NextPrime;11Nest[n@#//.x_/;!PalindromeQ[11x]:>n@x&,1,#-1]&

วนซ้ำโดยตรงผ่านการใช้งานเฉพาะช่วงเวลาNextPrimeและตรวจสอบว่านายกครั้งที่ 11 เป็น palindrome หรือไม่ Works ถึงN = 528 ผลลัพธ์ 528 และ 529 นั้นแตกต่างกันมากกว่า 2 16ช่วงซึ่ง//.จะไม่สามารถแทนที่ได้อย่างเพียงพอ


4

Python 2 , 111 107 103 102 101 100 91 90 89 ไบต์

เดนนิสทุบตีฉันที่นี่ดังนั้นลองดูคำตอบของเขา

คำตอบนี้ถูกจัดทำดัชนีเป็นศูนย์

n=input()
r=1
while n:r+=1;c=`r*11`;n-=all(r%x for x in range(2,r))*c==c[::-1]
print r*11

ลองออนไลน์!

บันทึกหนึ่งไบต์ต้องขอบคุณคณิตศาสตร์ขี้ยา

คำอธิบาย

ครั้งแรกที่เราจะใช้การป้อนข้อมูลและตั้งค่าให้เรายังทำให้ตัวแปรใหม่n r=1เราจะนับรวมrการค้นหา palindromes ที่เป็นผลผลิตของไพร์มและ 11 แต่ละครั้งที่เราพบอันใดอันหนึ่งเราจะลดค่าnจนกว่ามันจะถึง 0

ดังนั้นเราเริ่มวนซ้ำ:

while n:

สิ่งแรกที่เราทำคือการเพิ่มขึ้น r

r+=1

นอกจากนี้เรายังกำหนดตัวแปรcเป็นตัวแทนสตริงr*11

c=`r*11`

ตอนนี้เราต้องการที่จะลดลงnหากเราพบจำนวนดังกล่าว เราก็จะหักบูลีนเป็นตัวแทนถ้าเหมาะกับรูปแบบจากr*11 rถ้านี่Falseเราจะลบศูนย์และถ้ามันเป็นTrueมันจะลบ 1

ในการคำนวณบูลีนที่เราทำ:

all(r%x for x in range(2,r))*c==c[::-1]

ส่วนแรกallจะกำหนดว่าrเป็นนายกหรือไม่ เราคูณผลลัพธ์ด้วยcถ้าrเป็นไพรม์นี่จะเป็นcแต่ถ้าrเป็นคอมโพสิตมันจะเป็น""สตริงว่าง จากนั้นเราจะเปรียบเทียบนี้ซึ่งเป็นสิ่งที่ตรงกันข้ามของc[::-1] cถ้าrเป็นนายกและcเป็น palindrome นี่จะเป็นTrueถ้าทั้งล้มเหลวสิ่งทั้งหมดจะประเมินว่าเป็นเท็จ

เมื่อเป็นศูนย์เราก็nprint c

83 ไบต์

นี่คือโซลูชันแบบเรียกซ้ำที่สั้นกว่า แต่น่าเสียดายที่ไม่ตรงตามข้อกำหนดเพราะมันถึงขีดความสามารถในการเรียกซ้ำของงูเหลือมเร็วเกินไป

f=lambda n,r=1:n and f(n-all(r%x*(`r*11`==`r*11`[::-1])for x in range(2,r)),r+1)+11

ลองออนไลน์!


4

05AB1E , 15 ไบต์

0 การจัดทำดัชนี

11Iµ11N*DÂQNp*½

ลองออนไลน์!

คำอธิบาย

11               # initialize stack with 11
  Iµ             # loop over N in [1 ... inf] until counter equals input
    11N*         # multiply N by 11
        D        # duplicate
         ÂQ      # check if the copy equals its reverse
           Np    # check if N is prime
             *   # multiply the results of the checks together
              ½  # if 1, increase counter

3

Haskell , 94 90 ไบต์

h#n|n<2=0|mod n h<1=1+h#div n h|j<-h+1=j#n
([n|n<-[0,11..],(==)=<<reverse$show n,3>2#n]!!)

ลองออนไลน์! ตัวอย่างการใช้: ([n|n<-[0,11..],(==)=<<reverse$show n,3>2#n]!!) 127.

[0,11..]สร้างรายการไม่มีที่สิ้นสุด[0,11,22,33, ...](จำเป็นต้องมีศูนย์เพื่อสร้างลำดับ 1- ดัชนี) สำหรับแต่ละnรายการในรายการนี้เราจะตรวจสอบn==(read.reverse.show)nว่าnเป็น palindrome หรือไม่ 3>2#nตรวจสอบว่าnมีตัวคั่นหลักสองตัวสูงสุดหรือไม่ เพราะnหารด้วย 11 ได้เสมอเราไม่ได้ค่าจริง แต่มีแค่ semiprimes

แก้ไข:ขอบคุณØrjan Johansen สำหรับการเล่นกอล์ฟขนาด 4 ไบต์!


div n hคุณไม่จำเป็นต้องวงเล็บรอบ นอกจากนี้ก็จะมีผลต่อประสิทธิภาพ แต่แรกอาจจะสามารถเป็น2# h#
Ørjan Johansen

(==)=<<reverse$show nสั้นกว่า
Ørjan Johansen

2

PHP, 82 ไบต์

for(;$d<$argn;$i>1||($p=11*$n)!=strrev($p)?:$d++)for($i=++$n;--$i&&$n%$i;);echo$p;

ลองออนไลน์!


ใน "ลองออนไลน์" ที่ฉันต้องเขียนอินพุตหรือไม่ ถ้าฉันเขียน 1 ลงในช่อง "input" มันจะคืนค่า 395593
RosLuP

@RosLuP โดยปกติแล้วจะรันจากบรรทัดคำสั่งด้วยตัวเลือก -R ในเวอร์ชันออนไลน์คุณมีข้อ จำกัด และ$argn=81;เป็นตัวแปรอินพุตที่มีอยู่ในเวอร์ชันบรรทัดคำสั่ง
JörgHülsermann

ดังนั้นจึงมีเพียงการเขียนตัวแปรอินพุตใน "$ argn = 81" ดังนั้นถ้าอินพุทคือ 10 แค่เขียนมันใหม่ "$ argn = 10" โอเคขอบคุณ
RosLuP

@RosLuP ใช่แทนที่หมายเลข 81 ด้วยข้อมูลที่คุณต้องการ
JörgHülsermann

1

ความจริง 105 ไบต์

g(n)==(i:=c:=1;repeat(c=n=>break;i:=i+1;if(prime? i)then(x:=(11*i)::String;x=reverse(x)=>(c:=c+1)));i*11)

ungolf รหัสทดสอบและผลลัพธ์

f(n)==
   i:=c:=1
   repeat
      c=n=>break
      i:=i+1
      if(prime? i)then(x:=(11*i)::String;x=reverse(x)=>(c:=c+1))
   i*11


(5) -> [[i,g(i)]  for i in 1..23]
   (5)
   [[1,11], [2,22], [3,33], [4,55], [5,77], [6,121], [7,737], [8,979],
    [9,1111], [10,1441], [11,1661], [12,1991], [13,3113], [14,3223], [15,3443],
    [16,3883], [17,7117], [18,7447], [19,7997], [20,9119], [21,9229],
    [22,9449], [23,10901]]
                                          Type: List List PositiveInteger
(6) -> [[i,g(i)]  for i in [26,31,41,101,151,200]]
   (6)
   [[26,91619], [31,103301], [41,139931], [101,772277], [151,3739373],
    [200,11744711]]

นี่ g (700) = 92511529 ดังนั้นขีด จำกัด จะเป็น> 700; ww (1,000) = 703999307 แต่ใช้ nextPrime ()

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