ค้นหาซ้ำนายกซ้ำ


17

นายกรัฐมนตรีซ้ำเป็นลำดับของช่วงเวลาเช่นนั้น

p(1) = 2
p(n) = the p(n-1)th prime

นี่คือตัวอย่างของวิธีที่หนึ่งอาจคำนวณ Prime Prime แบบเรียกซ้ำครั้งที่ 4

p(4) = the p(3)th prime
p(3) = the p(2)th prime
p(2) = the p(1)th prime
p(1) = 2
p(2) = the 2nd prime
p(2) = 3
p(3) = the 3rd prime
p(3) = 5
p(4) = the 5th prime
p(4) = 11

คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่ให้ n ส่งออกค่า Prime Recursively Prime

คุณอาจเลือกที่จะใช้การจัดทำดัชนีตาม 0 หากคุณต้องการในกรณีที่คุณต้องระบุในคำตอบของคุณ

นี่คือดังนั้นเป้าหมายคือเพื่อลดจำนวนไบต์ของคุณ


กรณีทดสอบ

1 -> 2
2 -> 3
3 -> 5
4 -> 11
5 -> 31
6 -> 127
7 -> 709
8 -> 5381
9 -> 52711

รายการ OEIS ที่เกี่ยวข้อง: OEIS A007097

คำตอบ:




8

Mathematica ขนาด 16 ไบต์

Nest[Prime,1,#]&

ฟังก์ชั่นไม่ระบุชื่อ รับตัวเลขเป็นอินพุตและส่งคืนตัวเลขเป็นเอาต์พุต


5

เยลลี่ , 5 4 ไบต์

1 ไบต์ต้องขอบคุณ @Dennis

1ÆN¡

ลองออนไลน์!

คำอธิบาย

1        Starting with n = 1,
 ÆN      replace n by the nth prime
   ¡     (input) times.

คุณไม่จำเป็นต้อง
Dennis

@Dennis ดังนั้น¡ยอมรับเฉพาะ nilads เป็นการทำซ้ำและตั้งค่าเริ่มต้นเป็นอินพุตหากไม่พบหรือไม่
PurkkaKoodari

<f><n>¡อย่างมีความสุขยอมรับอะตอมเอกหรือ dyadic <n>สำหรับ อย่างไรก็ตามถ้า<f>เป็น nilad บางสิ่งต้องผิดดังนั้นจึงถูกวิเคราะห์คำ<f>¡แทนและรับอินพุตสุดท้าย (อาร์กิวเมนต์บรรทัดคำสั่งสุดท้าย STDIN ไม่มีเลย) <n>แทน
เดนนิส

5

JavaScript (ES6), 71 ไบต์

p=(n,x=1)=>n?p(n-1,(N=y=>x?N(++y,x-=(P=z=>y%--z?P(z):z==1)(y)):y)(1)):x

Ungolfed คุณมีสามฟังก์ชั่นวนซ้ำ:

P=(n,x=n)=>n%--x?P(n,x):x==1
N=(n,x=1)=>n?N(n-P(++x),x):x
p=(n,x=1)=>n?p(n-1,N(x)):x
  • P กำหนดว่า nเป็นนายกหรือไม่
  • N พบว่า nนายกครั้งที่;
  • pเรียกใช้ซ้ำNใน1 nเวลาอินพุต


3

R, 98 93 ไบต์

5 ไบต์ขอบคุณ @smci

นี่คือโซลูชันแบบเรียกซ้ำที่ไม่มีประสิทธิภาพอย่างน่ากลัว:

f<-function(m,n=1){j<-1;for(i in 1:n){j<-numbers::nextPrime(j)};a<-ifelse(m==0,j,f(m-1,j));a}

ทดสอบเอาท์พุท:

f(6)
[1] 127

f(10)        ### takes almost a minute... YIKES!!!
[1] 648391

1
คุณสามารถโกนหนวดนิดหน่อยโดยทำa<-ifelse(m==0,j,f(m-1,j))
smci


@Giuseppe คุณควรโพสต์สิ่งนั้นเป็นคำตอบ ... นั่นเป็นการลดลงอย่างมาก !!! ฉันไม่เคยเห็นifใช้มาก่อนเลย ... เจ๋งมาก !!
Joseph Wood

@JosephWood nah พวกเขาเป็นเพียงแค่กอล์ฟมาตรฐาน อัลกอริทึมหลักไม่เปลี่ยนแปลง ฉันขอแนะนำให้อ่านเคล็ดลับสำหรับการเล่นกอล์ฟใน Rสำหรับเคล็ดลับการเล่นกอล์ฟที่เจ๋งกว่านี้
Giuseppe

2

Bash + ยูทิลิตี้ทั่วไป, 55

เนื่องจากเรากำลังทำซ้ำแบบซ้ำนี่เป็นคำตอบแบบวนซ้ำ:

((SHLVL-2<$1))&&primes 2|sed -n "`$0 $1`{p;q}"||echo 1

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


หากไม่ดีแล้วนี่เป็นคำตอบทั่วไปมากขึ้น:

Bash + ยูทิลิตี้ทั่วไป, 58

for((i=$1;i--;));{
n=`primes 2|sed -n "$n{p;q}"`
}
echo $n

ลองมันออนไลน์


1

Haskell , 58 ไบต์

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

f 1=2;f n=[x|x<-[2..],all((>)2.gcd x)[2..x-1]]!!(f(n-1)-1)

ลองออนไลน์!

คำอธิบาย:

ใช้เหมือนกัน 0 การจัดทำดัชนีสำคัญรายการเคล็ดลับการเข้าถึงเป็นคำตอบของ Adnan
เป็นหลักตรงขึ้นตามข้อกำหนดอย่างอื่น

f 1=2; -- base case
f n= -- main case
    [x|x<-[2..],all((>)2.gcd x)[2..x-1]]             -- list of all primes
    [x|x<-[2..],                                     -- consider all numbers
                               [2..x-1]              -- consider all smaller numbers
                all((>)2.gcd x)                      -- is coprime with them?
                    (>)2.                            -- 2 is greater than
                         gcd x                       -- gcd(x,lambda input)
                                        !!(f(n-1)-1) -- access the
                                                     -- f(n-1)-th 1-indexed prime


0

สงสัย 23 ไบต์

p\.{1\2@:^(- p -#0 1)1P

1 การจัดทำดัชนี การใช้งาน:

p\.{1\2@:^(- p -#0 1)1P}; p 3

คำอธิบาย

p\.{                #. Pattern matching syntax
  1\2               #. Base case p(1)=2
  @:^(- p -#0 1)1P  #. Other cases p(n)=nthprime(p(n-1)-1)
                    #. nthprime is 0-indexed
}                   #. Trailing bracket is optional in this case
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.