Ana kümeyi paylaşıyor muyuz?


10

Ana küme , bir tam sayı K daha yüksek 2 en yüksek asal oluşturduğu çift olarak tanımlanır kesinlikle daha düşük N ve düşük asal katı daha yüksek N .

Yukarıdaki tanımın ardından, eğer tamsayı bir başbakan ise, baş kümesinin ondan önceki ve sonraki asal çiftidir .

Görev

İki tamsayı N , M ( N, M ≥ 3 ) verildiğinde , N ve M'nin aynı ana kümeye sahip olup olmadıklarına bağlı olarak bir doğruluk / falsy değeri verin .

Bu , bu nedenle amaç bayt sayınızı mümkün olduğunca azaltmaktır. Böylece, her programlama dilinde en kısa kod kazanır.

Test senaryoları / Örnekler

Örneğin, bir asal küme 9 olduğunu [7, 11], çünkü:

  • 7 , 9'dan kesinlikle daha düşük olan en yüksek asaldır ve
  • 11 , 9'dan kesinlikle daha yüksek olan en düşük asaldır .

Benzer şekilde, asal küme 67 olduğunu [61, 71](yani not 67 bir asal).

Gerçek çiftler

8, 10
20, 22
65, 65
73, 73
86, 84
326, 318
513, 518

Falsy Çiftleri

4, 5
6, 8
409, 401
348, 347
419, 418
311, 313
326, 305

Doğruluk / falsy değerleri iki ayrı değer olmalı mı yoksa programlarının çıktılarından bir doğruluk / falsi değerine ve çıktı (potansiyel olarak sonsuz) birçok farklı değere bir eşleme tanımlanabilir mi?
Jonathan Frech

@JonathanFrech Doğruluk / Karar-problem tanımı başına Falsy , ille de tutarlı değil ama distict ve doğruluk / falsy
Bay

Yanıtlar:


14

Jöle , 6 4 3 5 4 bayt

rÆPE

Çevrimiçi deneyin! veya Tüm test senaryolarını deneyin .

Nasıl çalışır

rÆPE    Main link. Arguments: N, M
r       Yield the range of integers between N and M, inclusive.
 ÆP     For each integer, yield 1 if it is prime, 0 otherwise.
   E    Yield 1 if all items are equal (none in the range were prime,
        or there's only one item).

Çalışır, çünkü iki sayının aralarında bir asal varsa veya her iki sayının da asal olması durumunda farklı ana kümeler vardır; her iki sayı da aynı değilse , bu durumda yine de Edöndürür 1(tek öğe dizisindeki tüm öğeler eşittir).


7
Programlarınızın kaynağı dostça görünmüyor ...
Stan Strum

2

Perl 6 , 52 bayt

{[eqv] @_».&{(($_...0),$_..*)».first(*.is-prime)}}

Dene

Expanded:

{  # bare block lambda with implicit slurpy input 「@_」

  [eqv]               # see if each sub list is equivalent

    @_».&{            # for each value in the input

      (

        ( $_ ... 0 ), # decreasing Seq
          $_ ..  *    # Range

      )».first(*.is-prime) # find the first prime from both the Seq and Range

    }
}


2

Yakut , 57 54 bayt

->n,m{[*n..m,*m..n].all?{|x|?1*x=~/^(11+)\1+$/}||n==m}

Çevrimiçi deneyin!

Kullanımları gelen korkunç regex asallık testi Cevabıma ilgili soruya (Ben bunu tıkladım kadar yaklaşık unutmuştu) bu sayı asal mı? . N, M ≥ 3'ümüz olduğundan, 1 için kontrol desenden kaldırılabilir, böylece bayt sayısı yerleşik olandan daha az olur.

Not: Regex primality testi patolojik, komik bir şekilde verimsizdir. En azından O (n!) Olduğuna inanıyorum, ancak şu anda anlamaya zamanım yok. 100.001'i kontrol etmesi on iki saniye sürdü ve iptal etmeden önce 1.000.001'de beş veya on dakika taşlama yapıyordu. Kullanım / kötüye kullanım riski size aittir.


1
Bu oranda olması muhtemeldir . Biliyor musun, 100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)koşmak için milleni alacak.
user202729

2

Retina , 58 bayt

\b(.+)¶\1\b

.+
$*
O`
+`\b(1+)¶11\1
$1¶1$&
A`^(11+)\1+$
^$

Çevrimiçi deneyin! Açıklama:

\b(.+)¶\1\b

Her iki giriş de aynıysa, her şeyi silin ve sonunda çıkış 1'e geçin.

.+
$*

Tekli'ye dönüştür.

O`

Sırala.

+`\b(1+)¶11\1
$1¶1$&

Tüm sayıların aralığını genişletin.

A`^(11+)\1+$

Tüm kompozit numaraları silin.

^$

Hiç sayı kalmadıysa, çıkış 1, aksi takdirde 0.


2

PARI / GP, 28 bayt

v->s=Set(v);#s<2||!primes(s)

Tüm test senaryoları ile çevrimiçi deneyin!

Döndürür 0veya 1(normal PARI / GP "Boole" değerleri).

Açıklama:

viki sayı Nve Mkoordinat olarak bir vektör (veya sütun vektörü veya liste) olmalıdır . Örneğin [8, 10]. Daha sonra sbu sayılardan yapılan "küme" olacaktır, bu ya bir koordinat vektörü (if N==M) ya da sıralı girişleri olan iki koordinat vektörü olacaktır .

Eğer #skoordinatların sayısı ssadece bir ise, 1(doğruluk) elde ederiz. Aksi takdirde, ila primesarasındaki kapalı aralıktaki tüm primerlerin bir vektörünü döndürür . Olumsuzluk Bunun verecektir (burada bir veya daha fazla asal) bir veya birden fazla sıfır olmayan girişlerinin vektörün olumsuzlaması verecektir ise vektör, boşsa .s[1]s[2]!10


2

JavaScript (ES6), 57 56 bayt

Körili sözdiziminde girdi alır (a)(b). 0Veya döndürür 1.

a=>b=>a==b|!(g=k=>a%--k?g(k):k<2||a-b&&g(a+=a<b||-1))(a)

Test senaryoları

Nasıl?

a => b =>                 // given a and b
  a == b |                // if a equals b, force success right away
  !(g = k =>              // g = recursive function taking k
    a % --k ?             //   decrement k; if k doesn't divide a:
      g(k)                //     recursive calls until it does
    :                     //   else:
      k < 2 ||            //     if k = 1: a is prime -> return true (failure)
      a - b &&            //     if a equals b: neither the original input integers nor
                          //     any integer between them are prime -> return 0 (success)
      g(a += a < b || -1) //     else: recursive call with a moving towards b
  )(a)                    // initial call to g()

2

R , 63 46 bayt

-17 Giuseppe tarafından

function(a,b)!sd(range(numbers::isPrime(a:b)))

Çevrimiçi deneyin!

ETHProductions 'Jelly çözümü oldukça basit bir uygulama . Ana ilginç paket , R boolean vektörleri any(x)==all(x)ile eşdeğer olmasıdır min(x)==max(x).



Ayrıca, min(x)==max(x)içindeki tüm öğelerin is_prime(a:b)eşit olup olmadığını kontrol etmekle eşdeğer olduğundan , bu son hileyi , veya paketiyle 46 bayta düşürmek için kullanabiliriz . primesnumbers
Giuseppe

2

C (gcc), 153146 bayt

i,B;n(j){for(B=i=2;i<j;)B*=j%i++>0;return!B;}
#define g(l,m,o)for(l=o;n(--l););for(m=o;n(++m););
a;b;c;d;h(e,f){g(a,b,e)g(c,d,f)return!(a-c|b-d);}

-7 Jonathan Frech tarafından

hİki intsaniye 1süren ve doğruluk ve falsey 0için geri dönen bir işlevi tanımlar

Çevrimiçi deneyin!

n argümanı asal değilse 1 döndüren bir işlevdir.

g birinci ve ikinci argümanlarını, üçüncü argümanından (sırasıyla) daha küçük ve daha büyük bir sonraki başlığa ayarlayan bir makrodur

hgher iki giriş için de yapar ve çıkışların aynı olup olmadığını kontrol eder.


return a==c&&b==d;olabilir return!(a-c|b-d);.
Jonathan Frech


@JonathanFrech TIO bağlantısı düzeltildi.
pizzapants184


1

APL (Dyalog Unicode) , 18 + 16 = 34 24 bayt

CY'dfns'
∧/=/4 ¯4∘.pco

Çevrimiçi deneyin!

Adám'a 10 bayt için teşekkürler .

Varsayılan Dyalog APL yüklemelerinde bulunan dfns ( d ynamic f unctio ns ) koleksiyonunu içe aktarmak için ⎕CY'dfns'( C OP Y ) satırı gereklidir .

Nasıl çalışır:

∧/=/4 ¯4∘.pco  Main function. This is a tradfn body.
               The 'quad' takes the input (in this case, 2 integers separated by a comma.
          pco   The 'p-colon' function, based on p: in J. Used to work with primes.
    4 ¯4∘.      Applies 4pco (first prime greater than) and ¯4pco (first prime smaller than) to each argument.
  =/            Compares the two items on each row
∧/              Applies the logical AND between the results.
                This yields 1 iff the prime clusters are equal.




0

Mathematica, 39 27 26 bayt

Equal@@#~NextPrime~{-1,1}&

Expanded:

                         &  # pure function, takes 2-member list as input
       #~NextPrime~{-1,1}   # infix version of NextPrime[#,{-1,1}], which
                            # finds the upper and lower bounds of each
                              argument's prime clusters
Equal@@                     # are those bounds pairs equal?

Kullanımı:

Equal@@#~NextPrime~{-1,1}& [{8, 10}]
(*  True  *)

Equal@@#~NextPrime~{-1,1}& [{6, 8}]
(*  False  *)

Equal@@#~NextPrime~{-1,1}& /@ {{8, 10}, {20, 22}, {65, 65}, 
    {73, 73}, {86, 84}, {326, 318}, {513, 518}}
(*  {True, True, True, True, True, True, True}  *)

Equal@@#~NextPrime~{-1,1}& /@ {{4, 5}, {6, 8}, {409, 401}, 
    {348, 347}, {419, 418}, {311, 313}}
(*  {False, False, False, False, False, False}  *)

Katkılar: Jenny_mathy tarafından -12 bayt , Martin Ender tarafından -1 bayt


Bu sadece bir sonraki başbakanı kontrol eder. NextPrime'i deneyin [#, {- 1,1}]
J42161217

@Jenny_mathy: Doğru olduğunu görüyorum. Şimdi geçtiği gösterilmiş olan "348, 347" test durumu
Eric Towers

27 bayt: Equal@@NextPrime[#,{-1,1}]&giriş olarak alır [{N,M}]veya orijinal girişi tutmak istiyorsanız bu 30 baytı kullanın:Equal@@NextPrime[{##},{-1,1}]&
J42161217

@Jenny_mathy: Şey, ..., belirtilen girdi bir liste değil, iki tamsayıdır, bu yüzden ...
Eric Towers

1
@EricTowers bir liste alarak iyidir . Ayrıca, infix gösterimini kullanarak bir bayt kaydedebilirsiniz #~NextPrime~{-1,1}.
Martin Ender

0

J , 15 bayt

-:&(_4&p:,4&p:)

Nasıl çalışır:

   &(           ) - applies the verb in the brackets to both arguments
            4&p:  - The smallest prime larger than y
      _4&p:       - The largest prime smaller than y
           ,      - append
 -:               - matches the pairs of the primes

Çevrimiçi deneyin!

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.