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
Tuan Xcoder
sumber
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).

Produksi ETH
sumber
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

    }
}
Brad Gilbert b2gills
sumber
2

Python 3 , 103 95 91 byte

lambda*z:len({*z})<2or[1for i in range(min(z),max(z)+1)if all(i%k for k in range(2,i))]<[0]

Cobalah online!

Halvard Hummel
sumber
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.

Pasang kembali Monica - notmaynard
sumber
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.

Neil
sumber
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.

Jeppe Stig Nielsen
sumber
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()
Arnauld
sumber
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).

Kriminal kriminal
sumber
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.

pizzapants184
sumber
return a==c&&b==d;bisa return!(a-c|b-d);.
Jonathan Frech
146 byte .
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.
J. Sallé
sumber
1

Python 2 , 87 86 byte

lambda*v:v[0]==v[1]or{1}-{all(v%i for i in range(2,v))for v in range(min(v),max(v)+1)}

Cobalah online!

ovs
sumber
Saya suka set penggunaan Anda, meskipun tidak diperlukan untuk 87 byte .
Jonathan Frech
@ JonathanFrech Saya mendapatkannya di 86 menggunakan set
ovs
1

C (gcc) , 103 byte 100 byte

i,j,p,s;f(m,n){s=1;for(i=m>n?i=n,n=m,m=i:m;i<=n;i++,p?s=m==n:0)for(p=j=2;j<i;)p=i%j++?p:0;return s;}

Cobalah online!

gastropner
sumber
0

Haskell , 81 byte

Solusi mudah:

p z=[x|x<-z,all((0/=).mod x)[2..x-1]]!!0
c x=(p[x-1,x-2..],p[x+1..])
x!y=c x==c y

Cobalah online!

pengguna28667
sumber
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

Menara Eric
sumber
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!

Galen Ivanov
sumber