Apakah kita berbagi cluster utama?


10

The Cluster utama dari integer N lebih tinggi dari 2 didefinisikan sebagai pasangan yang dibentuk oleh perdana tertinggi ketat lebih rendah dari N dan terendah perdana ketat lebih tinggi dari N .

Perhatikan bahwa mengikuti definisi di atas, jika bilangan bulat adalah bilangan prima itu sendiri, maka kluster prima adalah pasangan bilangan prima sebelum dan menggantikannya .

Tugas

Diberikan dua bilangan bulat bilangan bulat N , M ( N, M ≥ 3 ), menghasilkan nilai kebenaran / kepalsuan berdasarkan apakah N dan M memiliki gugus utama yang sama.

Ini adalah , jadi tujuannya adalah untuk mengurangi jumlah byte Anda sebanyak mungkin. Dengan demikian, kode terpendek dalam setiap bahasa pemrograman menang.

Uji kasus / Contoh

Misalnya, gugus utama 9 adalah [7, 11], karena:

  • 7 adalah prime tertinggi yang lebih rendah dari 9 , dan
  • 11 adalah prime terendah yang lebih tinggi dari 9 .

Demikian pula, kluster utama 67 adalah [61, 71](perhatikan bahwa 67 adalah prima).

Pasangan yang benar

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

Pasangan palsu

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

Apakah nilai kebenaran / kepalsuan harus dua nilai berbeda atau dapatkah seseorang mendefinisikan pemetaan dari keluaran program mereka ke nilai kebenaran / kepalsuan dan keluaran (berpotensi tak terhingga) banyak nilai yang berbeda?
Jonathan Frech

@JonathanFrech Truthy / Falsy per definisi masalah keputusan , tidak harus konsisten tetapi membingungkan dan kebenaran / falsy
Tn. Xcoder

Jawaban:


14

Jelly , 6 4 3 5 4 byte

rÆPE

Cobalah online! atau Coba semua test case .

Bagaimana itu bekerja

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).

Berfungsi karena dua angka memiliki cluster prima yang berbeda jika ada prima di antara mereka, atau salah satu angka itu sendiri prima; kecuali kedua angka sama, dalam hal ini tetap Ekembali 1(semua item dalam array satu item sama).


7
Sumber program Anda tidak terlihat ramah ...
Stan Strum

2

Perl 6 , 52 byte

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

Menguji

Diperluas:

{  # 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

Ruby , 57 54 byte

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

Cobalah online!

Menggunakan tes primitif regex yang mengerikan dari jawaban saya (yang saya lupa sampai saya mengkliknya) untuk pertanyaan terkait Apakah nomor ini prima? . Karena kita memiliki N, M ≥ 3, cek untuk 1 dapat dihapus dari pola, membuat jumlah byte lebih sedikit daripada menggunakan built-in.

Catatan: Tes primitif regex secara patologis, meriah tidak efisien. Saya percaya itu setidaknya O (n!), Meskipun saya tidak punya waktu untuk memikirkannya sekarang. Butuh dua belas detik untuk memeriksa 100.001, dan menggiling selama lima atau sepuluh menit pada 1.000.001 sebelum saya membatalkannya. Gunakan / penyalahgunaan dengan risiko Anda sendiri.


1
Pada tingkat itu kemungkinan . Anda tahu, 100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)yang akan membutuhkan milenia untuk dijalankan.
user202729

2

Retina , 58 byte

\b(.+)¶\1\b

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

Cobalah online! Penjelasan:

\b(.+)¶\1\b

Jika kedua input sama, cukup hapus semuanya, dan lanjutkan ke output 1 di akhir.

.+
$*

Konversikan ke unary.

O`

Sortir sesuai pesanan.

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

Perluas ke rentang semua angka.

A`^(11+)\1+$

Hapus semua angka komposit.

^$

Jika tidak ada angka yang tersisa, hasilkan 1, jika tidak 0.


2

PARI / GP, 28 byte

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

Cobalah secara online dengan semua kasus uji!

Pengembalian 0atau 1(nilai PARI / GP "Boolean" biasa).

Penjelasan:

vharus berupa vektor (atau vektor kolom, atau daftar) dengan dua angka Ndan Msebagai koordinat. Sebagai contoh [8, 10]. Maka sakan menjadi "set" yang dibuat dari angka-angka ini, yang dapat berupa vektor satu koordinat (jika N==M), atau vektor dua koordinat dengan entri yang diurutkan .

Maka jika jumlah #skoordinat dalam shanya satu, kita dapatkan 1(benar). Jika tidak, primesakan mengembalikan vektor semua bilangan prima dalam interval tertutup dari s[1]ke s[2]. Negasi !itu akan memberikan 1jika vektor kosong, sementara negasi vektor satu atau lebih entri tidak nol (di sini satu atau lebih bilangan prima) akan memberikan 0.


2

JavaScript (ES6), 57 56 byte

Mengambil input dalam sintaks currying (a)(b). Pengembalian 0atau 1.

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

Uji kasus

Bagaimana?

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 byte

-17 oleh Giuseppe

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

Cobalah online!

Aplikasi yang cukup sederhana dari solusi Jelly ETHProductions . Takeaway menarik utama adalah bahwa dengan vektor boolean R any(x)==all(x)setara dengan min(x)==max(x).



Juga, karena min(x)==max(x)sama dengan memeriksa bahwa semua elemen di is_prime(a:b)sama, kita dapat menggunakan trik terakhir ini untuk turun ke 46 byte dengan paket primesatau numbers.
Giuseppe

2

C (gcc), 153 146 byte

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 dari Jonathan Frech

Menentukan fungsi hyang mengambil dua intdan mengembalikan 1untuk kebenaran dan 0untuk falsey

Cobalah online!

n adalah fungsi yang mengembalikan 1 jika argumennya tidak prima.

g adalah makro yang menetapkan argumen pertama dan kedua ke prime berikutnya kurang dari dan lebih besar dari (masing-masing) argumen ketiga

htidak guntuk input dan memeriksa apakah outputnya sama.


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


@JonathanFrech Memperbaiki tautan TIO.
pizzapants184


1

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

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

Cobalah online!

Terima kasih kepada Adám selama 10 byte.

Garis ⎕CY'dfns'( C OP Y ) diperlukan untuk mengimpor dfns ( d inamis f unctio ns ) koleksi, termasuk dengan standar Dyalog APL menginstal.

Bagaimana itu bekerja:

∧/=/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 byte

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

Diperluas:

                         &  # 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?

Pemakaian:

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}  *)

Kontribusi: -12 byte oleh Jenny_mathy , -1 byte oleh Martin Ender


Ini hanya memeriksa perdana berikutnya. Coba NextPrime [#, {- 1,1}]
J42161217

@ Jenny_mathy: Saya melihat Anda benar. Terperangkap oleh kasus uji "348, 347", yang sekarang terbukti lulus.
Eric Towers

27 byte: Equal@@NextPrime[#,{-1,1}]&ambil sebagai input [{N,M}]atau jika Anda ingin tetap menggunakan input asli, gunakan 30 byte ini:Equal@@NextPrime[{##},{-1,1}]&
J42161217

@ Jenny_mathy: Ya, ..., input yang ditentukan adalah dua bilangan bulat, bukan daftar, jadi ...
Eric Towers

1
@EricTowers mengambil daftar tidak masalah . Anda juga dapat menyimpan byte dengan menggunakan notasi infix #~NextPrime~{-1,1}.
Martin Ender

0

J , 15 byte

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

Bagaimana itu bekerja:

   &(           ) - 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

Cobalah online!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.