Rakamlar bile asal olabilir mi?


24

Sekans

Herkes tek asal sayının bile olduğunu bilir 2. Ho-hum. Ama bazı çift sayılar vardır nile birleştirilmiş, n-1bunlar haline bir asal sayı.

Yeni başlayanlar 1için listede yok, çünkü 10asal değil. Benzer şekilde 2( 21) ve 3( 32) ile. Ancak, 4çalışır çünkü 43asaldır, bu yüzden dizideki ilk sayıdır a(1) = 4. Sonraki numara olduğunu eserler (ne 6( 65) ne de 8( 87) iş) olduğu 10, çünkü 109asal yüzden a(2) = 10. Sonra bir demet daha atlarız 22, çünkü 2221asal olana kadar a(3) = 22. Ve bunun gibi.

Herhangi tek sayı çünkü Açıkçası bu dizideki tüm terimler, eşitlendik nile birleştirilmiş n-1(gibi hatta olur 3içine dönüşler 32asal olmayacak).

Bu, OEIS üzerindeki A054211 dizisidir .

Meydan okuma

nBu diziye bir yere uyan bir girdi numarası verildiğinde (yani, asal olan nbirleşik n-1), bu dizilimdeki konumunu gösterir. 0 veya 1 indeksli seçebilirsiniz, ancak lütfen gönderiminizde hangisini belirtin.

kurallar

  • Giriş ve çıktının, dilinizin yerel tamsayı tipine uyacağı varsayılabilir.
  • Giriş ve çıkış verilebilir herhangi bir uygun formatta .
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine geri gönderebilirsiniz.
  • Mümkünse, lütfen başkalarının kodunuzu deneyebilmesi için çevrimiçi bir test ortamına bir bağlantı ekleyin!
  • Standart boşluklar yasaktır.
  • Bu olduğundan, tüm normal golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Örnekler

Aşağıdaki örnekler 1 indekslidir.

n = 4
1

n = 100
11

n = 420
51

1
Neden bunu tersten yapmak zorundasın? cQuents bu moda sahip değil :(
Stephen

4
@StepHen Sadece bir tempo değişikliği için; normalden farklı bir şey.
AdmBorkBork

9
Bunun bir karar sorunu olarak daha iyi olacağını düşünüyorum.
Buğday Sihirbazı 16

4
Sadece 2 değil, 2, 3 ile bölünebilen tek asal sayı değil, 3 ile bölünebilen tek asal sayı ve 5, 5 ile bölünebilen ntek asal sayıdır n. Özel değil - asal sayılar böyle çalışır.
Esolanging Fruit,

Yanıtlar:


11

Jöle ,  8  7 bayt

ḊżṖVÆPS

Bir sekans üyesini alan ve indeksini sekansta döndüren monadik bir link.

Çevrimiçi deneyin!

Nasıl?

ḊżṖVÆPS - Link: number, n
Ḋ       - dequeue (implicit range) = [ 2   , 3   , 4   ,... ,              n         ]
  Ṗ     - pop (implicit range)     = [   1 ,   2 ,   3 ,... ,                  n-1   ]
 ż      - zip                      = [[2,1],[3,2],[4,3],... ,             [n , n-1]  ]
   V    - evaluate as Jelly code   = [ 21  , 32  , 43  ,... ,         int("n"+"n-1") ]
    ÆP  - is prime? (vectorises)   = [  0  ,  0  ,  1  ,... , isPrime(int("n"+"n-1"))]
      S - sum

TIO benim için aşağı değil, belki daha yeni geri döndü?
Conor O'Brien,

1
2 dakika önce düzeltildi :)
Jonathan Allan,

Güzel! Bu zip(head(), pop())numara gerçekten harika. :)
DJMcMayhem

Hangi kodlamada bu 7 bayt?
kylefinn

1
@kylefinn Jelly'in kendi kod sayfası var, görmek için başlıktaki bayt bağlantısını tıklayın.
Jonathan Allan,

8

Haskell , 80 75 70 bayt

Laikoni sayesinde 5 bayt tasarruf

p x=all((>0).mod x)[2..x-1]
g n=sum[1|x<-[4..n],p$read$show=<<[x,x-1]]

Çevrimiçi deneyin!


1
p x=all((>0).mod x)[2..x-1]1 için başarısız olan daha kısa ana testi kullanabileceğinizi düşünüyorum , ancak bu durumda önemli olmamalıdır.
Laikoni

1
Ayrıca show x++show(x-1)kısaltılabilir show=<<[x,x-1].
Laikoni

@Laikoni Püf noktaları için teşekkürler! Daha showkısa bir yöntemle yapılabileceğini düşündüm ama bir sebepten dolayı bir eşleşme haritası düşünmedim.
Buğday Sihirbazı,

6

Jöle , 12, 10 , 8 bayt

;’VÆPµ€S

Çevrimiçi deneyin!

@ Nmjmcman101 sayesinde kaydedilen 1-2 bayt ve @Dennis sayesinde kaydedilen 2 bayt!

Açıklama:

     µ€   # For N in range(input()):
;         #   Concatenate N with...
 ’        #   N-1
  V       #   And convert that back into an integer
   ÆP     #   Is this number prime?
       S  # Sum that list 

Sadece R'yi bırakıp örtülü aralığı kullanabilir misiniz?
nmjcman101

@ nmjcman101 Bunun bir şey olduğunu tamamen bilmiyordum. Teşekkürler!
DJMcMayhem

5

05AB1E , 9 8 7 bayt

kod

ƒNN<«pO

05AB1E kodlamasını kullanır . Çevrimiçi deneyin!

açıklama

ƒ          # For N in [0 .. input]..
 NN<«      #   Push n and n-1 concatenated
     p     #   Check for primality
      O    #   Sum the entire stack (which is the number of successes)

Elbette bu, 05AB1E'nin hataları görmezden gelmesinden yararlanıyor ... çünkü '0-1'asal olup olmadığını kontrol edebileceğinizi sanmıyorum .
Outgolfer Erik,

5

Kabuğu , 13 11 10 bayt

1-dexed çözüm:

#ȯṗdS¤+d←ḣ

Çevrimiçi deneyin!

Ungolfed / Açıklama

         ḣ -- in the range [1..N]
#          -- count the number where the following predicate is true
        ←  --   decrement number,
    S  d   --   create lists of digits of number and decremented 
     ¤+    --   concatenate,
   d       --   interpret it as number and
 ȯṗ        --   check if it's a prime number

Baytlar için teşekkürler @ Zgarb -3!


1
£İpeşittir . Ayrıca, #…ḣyerine bir bayt kaydedebilirsiniz £f…N.
Zgarb


4

Pyth , 12 bayt

smP_s+`d`tdS

Çevrimiçi deneyin! veya Tüm Test Durumlarını Doğrulayın.


Nasıl?

smP_s+`d`tdSQ  -> Full Program. Takes input from Standard Input. Q means evaluated input
                  and is implicit at the end.

 m         SQ  -> Map over the Inclusive Range: [1...Q], with the current value d.
    s+`d`td    -> Concatenate: d, the current item and: td, the current item decremented. 
                  Convert to int.
  P_           -> Prime?
s              -> Sum, counts the occurrences of True.

4

Japt , 15 14 12 11 9 8 bayt

1 endeksli.

ÇsiZÄÃèj

Dene

Ç            :Map each Z in the range [0,input)
 s           :  Convert to string
  i          :    Prepend
   ZÄ        :    Z+1
     Ã       :End map
      è      :Count
       j     :  Primes


Gah! Neden Æve için böyle bir kör nokta var Ç? Teşekkürler, @Oliver; Bir bilgisayara geri döndüğümde güncelleme yapacağım.
Shaggy,

2o+X(sondaki boşlukla) yerine işe yarardı [XXÉ], eğer otomatik dengeleme []dirseklerine yaklaşırsam çözümünüz bayt daha kısa olacak. (Aslında 2, yapabileceğinden beri õ_ZÉ]¬nÃèj)
ETHproductions

@ETHproductions: Bu günlerde, bir dizi ile çalışırken yaptığım ilk şey, otomatik dengelemenin eklenip eklenmediğini kontrol etmek []! : D
Shaggy

Bazı nedenlerden dolayı, noktalı virgüllerin de çalışmayı tamamen bıraktığını düşünüyorum, bu yüzden bunu düzeltmeye çalışacağım. Yine de yarın öğleden sonraya kadar bir şansım olacağını düşünmeyin.
ETHProductions

3

Röda , 73 bayt

{seq 3,_|slide 2|parseInteger`$_2$_1`|{|i|[1]if seq 2,i-1|[i%_!=0]}_|sum}

Çevrimiçi deneyin!

1 endeksli. Girdi ve çıktı yapmak için akımı kullanır.

Açıklama:

{
seq 3,_| /* Create a stream of numbers from 3 to input */
slide 2| /* Duplicate every number except the first and the last
            to create (n-1,n) pairs */
parseInteger`$_2$_1`| /* Concatenate n and n-1 and convert to integer */
{|i| /* For every i in the stream: */
    [1]if seq 2,i-1|[i%_!=0] /* Push 1 if i is a prime
                                (not divisible by smaller numbers) */
}_|
sum /* Return the sum of numbers in the stream */
}

2

Pyth , 14 bayt

lfP_Tms+`d`tdS

Çevrimiçi deneyin!

açıklama

              Q    # Implicit input
             S     # 1-indexed range
     m             # For d in range [1, Q]...
      s+`d`td      # Concatenate d and d - 1
 fP_T              # Filter on primes
l                  # Return the length of the list

Beni birkaç saniye yendin, seni birkaç byte
yendim

@ Mr.Xcoder İlk versiyonum şuydu lfTmP_s+`d`tdS: O sırada numarayı kendim bulamamış oldum :)
Jim


2

C, 99 94 bayt

1 endekslendi. Bu kadar hesaplama açısından israf eden ilkellik testlerini yazmak beni üzüyor ama sonuçta baytlar bayt.

Bazı kırılgan şeylere izin verirsek, makinemde GCC 7.1.1 ile optimizasyon yapmadan derleme aşağıdaki 94 bayt çalışır (thanks @Conor O'Brien )

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}

Aksi takdirde bu çok daha güçlü 99 bayt iş yapıyor

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}return c;}

Tam program, biraz daha okunabilir:

i,c,m,k;
f(n){
    c=i=1;
    for(;++i<n;c+=m==k){
        for(k=m=1;m*=10,m<i;);
        for(m=i*m+i-1;++k<m&&m%k;);
    }
    return c;
}

int main(int argc, char *argv[])
{
    printf("%d\n", f(atoi(argv[1])));
    return 0;
}

Derleyicinize bağlı olarak, n=c;yerine aşağıdakileri kullanarak bazı baytları kaydedebilirsiniz return c;:i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}
Conor O'Brien

Optimizasyon seviyelerine göre değişkenlik gösteren şeyler kullanmak istediğimi söyleyemem. GCC kullanarak, optimizasyon olmadan -O0 çalışır, diğer optimizasyon bayraklarıyla çalışmaz. İlginçtir ki -O1 -O2 ve -O3 0 döndürür, -Os ile 1 döndürür, -Og ile n-1 döndürür.
algmyr

Cevabınızda her zaman programınızın nasıl derlenmesi gerektiğini belirleyebilirsiniz.
Conor O'Brien,

Sanırım biraz ucuz hissettiriyor. Ama bir alternatif ekleyebilirim.
algmyr

Anlıyorum, ama bunu yapmak için kötü hissetmiyorum - C'de golf
Conor O'Brien,

2

JavaScript (ES6),  49 48  47 bayt

1 endeksli. Motorunuzun arama yığını boyutu ile sınırlıdır.

f=n=>n&&f(n-2)+(p=n=>n%--x?p(n):x<2)(x=n+[--n])

Çevrimiçi deneyin!


1

Mathematica, 77 bayt

Position[Select[Range@#,PrimeQ@FromDigits[Join@@IntegerDigits/@{#,#-1}]&],#]&

0

QBIC , 25 bayt

[:|p=p-µa*z^_l!a$|+a-1}?p

açıklama

[:|     FOR a = 1 to <n>
p=p-    Decrement p (the counter) by
µ       -1 if the following is prime, or 0 if not
        For the concatenating, we multiply 'a' by 10^LENGTH(a), then add a-1$┘p
        Example 8, len(8) = 1, 8*10^1 = 80, add 8-1=7, isPrime(87) = 0
a*z^_l!a$|+a-1
}       Close the FOR loop - this also terminates the prime-test
?p      Print p, the 0-based index in the sequence.

Bu, iyi bir önlem almak için üzerine tokatlanan alçıya dizilen bazı oldukça karmaşık matematik olaylarını kullanır. Sürüm şapka yapmak yalnızca dizge temelli birleştirme işlemini bir bayt daha yapar:

[:|A=!a$+!a-1$┘p=p-µ!A!}?p

0

PHP , 203 bayt

<?php $n=($a=$argv[1]).($a-1);$p=[2];$r=0;for($b=2;$b<=$n;$b++){$x=0;if(!in_array($b,$p)){foreach($p as $v)if(!($x=$b%$v))break;if($x)$p[]=$b;}}for($b=1;$b<=$a;$b++)if(in_array($b.($b-1),$p))$r++;die $r;

Çevrimiçi deneyin!

Çıktı için 1 tabanlı bir dizin kullanır. TIO bağlantısı, kodun okunabilir bir sürümüne sahiptir.


0

Yakut , 42 + 9 = 51 bayt

Kullanır -rprime -nBayrakları . 1 endeksli.

Koşulu yerine getiren girişe eşit ya da altındaki tüm sayıları (veya teknik olarak koşulu yerine getiren tüm sayıları) sayarak çalışır n-1. Girişin sıralamada olması garanti edildiğinden, böyle bir rastgele girişten kaynaklanan hataların 7“asal” hale gelme riski yoktur .

p (?3..$_).count{|i|eval(i.next+i).prime?}

Çevrimiçi deneyin!




0

Java 8, 108 bayt

n->{for(long r=0,q=1,z,i;;){for(z=new Long(q+""+~-q++),i=2;i<z;z=z%i++<1?0:z);if(z>1)r++;if(q==n)return r;}}

0 endeksli

Açıklama:

Çevrimiçi deneyin.

n->{                             // Method with integer parameter and long return-type
  for(long r=0,                  //  Result-long, starting at 0
      q=1,                       //  Loop integer, starting at 1
      z,i;                       //  Temp integers
      ;){                        //  Loop indefinitely
    for(z=new Long(q+""+~-q++),  //   Set z to `q` concatted with `q-1`
        i=2;i<z;z=z%i++<1?0:z);  //   Determine if `z` is a prime,
      if(z>1)                    //   and if it indeed is:
        r++;                     //    Increase the result-long by 1
      if(q==n)                   //   If `q` is now equal to the input integer
        return r;}}              //    Return the result

0

Stax , 10 bayt

1- Endekslenmiş

Äm▬á┌╕|°φ♦

Çalıştır ve hata ayıklama o açıklama

Rxr\{$e|pm|+         #Full program, unpacked, implicit input  (Example (4))
R                    #Create [1 to input] range  (ex [1,2,3,4] )             
 x                   #Copy value from x register (ex (4) )
  r                  #Create [0 to input-1] range (ex [0,1,2,3)
   \                 #Create array pair using the range arrays (ex [[1,0],[2,1],[3,2],[4,3]])
    {    m           #Map block
     $e|p            #To string, eval string (toNum), isPrime (ex [1,0] => "10" => 10 => 0)
          |+         #Sum the array to calculate number of truths (ex [0,0,0,1] => 1)

0

Düzenli , 33 bayt

index({n:prime(n.n-1|int)}from N)

Çevrimiçi deneyin!

açıklama

Temel fikir, geçerli sayılardan oluşan bir dizi oluşturmak ve ardından bir köreli indeks işlevi döndürmektir.

index({n:prime(n.n-1|int)}from N)
      {n:                }from       select all numbers `n` from...
                               N     the set of natural numbers, such that:
               n.n-1                     `n` concatenated with `n-1`
                    |int                 ...converted to an integer
         prime(         )                ...is prime
index(                          )    function that returns index of input in that sequence
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.