Tekrarlayan Asal Asalları Bulun


17

Özyinelemeli Asal Asal değerler,

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

İşte 4. Özyinelemeli Prime Prime'ı nasıl hesaplayabileceğinize bir örnek.

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 verildiğinde, n. Özyinelemeli Prime Prime çıktısı veren bir program veya işlev yazmalısınız.

İsterseniz 0 tabanlı indekslemeyi kullanmayı tercih edebilirsiniz, bu durumda cevabınızda belirtmeniz gerekir.

Bu böylece bayt sayınızı en aza indirmek amaç.


Test Durumları

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

İlgili OEIS girişi: OEIS A007097

Yanıtlar:


13

Vaha , 3 bayt

Program 0 dizinlidir . Kod:

<q2

Formülü kullanır: a (n) = nth_prime (a (n-1) - 1) , temel durum a (0) = 2'dir .

Kod açıklaması:

  2   = a(0)

<     # Decrement a(n - 1) to get a(n - 1) - 1
 q    # prime(a(n - 1) - 1)

Çevrimiçi deneyin!



8

Mathematica, 16 bayt

Nest[Prime,1,#]&

Anonim işlev. Bir sayıyı girdi olarak alır ve bir sayıyı çıktı olarak döndürür.


5

Jöle , 5 4 bayt

@Dennis sayesinde 1 bayt.

1ÆN¡

Çevrimiçi deneyin!

açıklama

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

İhtiyacınız yok .
Dennis

@Dennis Peki niladları ¡yalnızca tekrar olarak kabul ediyor ve hiçbiri bulunmazsa varsayılan olarak giriyor mu?
PurkkaKoodari

<f><n>¡mutlulukla monadik veya çift atomları kabul eder <n>. Bununla birlikte, <f>bir nilad ise , bir şey yanlış olmalıdır, bu yüzden bunun <f>¡yerine ayrıştırılır ve bunun yerine son girdiyi (son komut satırı argümanı, STDIN yok) alır <n>.
Dennis

5

JavaScript (ES6), 71 bayt

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, üç ayrı özyinelemeli fonksiyonunuz var:

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
  • Pnasal olup olmadığını belirler ;
  • Ninci'yi bulur n;
  • pNgiriş 1 nzamanlarında yinelemeli olarak çalışır .

4

MATL , 6 bayt

1i:"Yq

Çevrimiçi deneyin!

açıklama

1      % Push 1
i      % Input n
:      % Range [1 2 ... N]
"      % For each (that is, do the following N times)
  Yq   %   k-th prime, where k is the input
       % End for each (implicit)
       % Display stack (implicit)

3

R, 98 93 bayt

@Smci sayesinde 5 bayt

İşte korkunç derecede verimsiz bir özyinelemeli çözüm:

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}

Test Çıkışı:

f(6)
[1] 127

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

1
Yaparak biraz tıraş olabilira<-ifelse(m==0,j,f(m-1,j))
smci


@Giuseppe, bunu bir cevap olarak göndermelisin ... bu önemli bir düşüş !!! Daha önce hiç böyle görmedim if... çok güzel !!
Joseph Wood

@JosephWood nah, bunlar sadece standart golfler; çekirdek algoritma değişmedi. (Genellikle korkunç R tarzı olmasına rağmen ) r biraz daha serin Golf ipuçları için golf ipuçlarını okuma öneririz .
Giuseppe

2

Bash + genel altyapı, 55

Özyinelemeli hazırlıklar yaptığımız için, özyinelemeli bir cevap:

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

Özyineleme düzeyi sayımı $SHLVLyerleşik değişkene dayandığından , zaten birkaç kabuk düzeyi derinseniz yanıt kapalı olabilir. Muhtemelen bu cevap TIO üzerinde çalışmaz.


Bu iyi değilse, işte daha geleneksel bir cevap:

Bash + genel altyapı, 58

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

Çevrimiçi deneyin .


1

Haskell , 58 bayt

1 endeksli

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

Çevrimiçi deneyin!

Açıklama:

Adnan'ın cevabı ile aynı 0 endeksli ana liste erişim hilesini kullanır .
Esasen düzleştirme, spesifikasyonu izler.

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

1

05AB1E , 4 bayt

ÎF<Ø

Çevrimiçi deneyin!

açıklama

ÎF<Ø
Î    # Push 0 and input
 F   # Do input times...
  <   # Decrement
   Ø  # Get the nth prime (0-indexed) with n being the top of the stack

0

Harika , 23 bayt

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

1 endeksli. Kullanımı:

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

açıklama

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.