Chúng ta có chia sẻ cụm nguyên tố không?


10

Các cụm thủ của một số nguyên N cao hơn 2 được định nghĩa là cặp hình thành bởi các thủ cao nhất chặt chẽ giảm hơn N và thủ thấp nhất chặt chẽ cao hơn N .

Lưu ý rằng theo định nghĩa ở trên, nếu số nguyên là một số nguyên tố, thì cụm nguyên tố của nó là cặp số nguyên tố đứng trướckế tiếp nó.

Bài tập

Cho hai số nguyên N , M ( N, M ≥ 3 ), đưa ra giá trị trung thực / giả dựa trên việc NM có cùng cụm nguyên tố hay không.

Đây là , vì vậy mục đích là giảm số byte của bạn càng nhiều càng tốt. Do đó, mã ngắn nhất trong mọi ngôn ngữ lập trình sẽ thắng.

Các trường hợp thử nghiệm / Ví dụ

Chẳng hạn, cụm số nguyên tố 9[7, 11], bởi vì:

  • 7 là số nguyên tố cao nhất thấp hơn 9
  • 11 là số nguyên tố thấp nhất hoàn toàn cao hơn 9 .

Tương tự, cụm số nguyên tố của 67[61, 71](lưu ý rằng 67 là số nguyên tố).

Cặp thật

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

Cặp giả

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

Các giá trị trung thực / giả có phải là hai giá trị riêng biệt hay người ta có thể định nghĩa ánh xạ từ đầu ra chương trình của chúng sang giá trị trung thực / giả và nhiều giá trị khác nhau không?
Jonathan Frech

@JonathanFrech Truthy / Falsy theo định nghĩa vấn đề quyết định, không nhất thiết phải nhất quán nhưng mâu thuẫn và trung thực / giả dối
Ông Xcoder

Câu trả lời:


14

Thạch , 6 4 3 5 4 byte

rÆPE

Hãy thử trực tuyến! hoặc Thử tất cả các trường hợp thử nghiệm .

Làm thế nào nó hoạt động

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

Hoạt động vì hai số có các cụm số nguyên tố khác nhau nếu có một số nguyên tố giữa chúng hoặc một trong hai số đó là số nguyên tố; trừ khi cả hai số đều giống nhau, trong trường hợp này Etrả về 1dù thế nào (tất cả các mục trong một mảng đơn mục đều bằng nhau).


7
Nguồn chương trình của bạn trông không thân thiện ...
Stan Strum

2

Perl 6 , 52 byte

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

Kiểm tra nó

Mở rộng:

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

Hãy thử trực tuyến!

Sử dụng bài kiểm tra nguyên thủy regex khủng khiếp từ câu trả lời của tôi (điều mà tôi đã quên cho đến khi tôi nhấp vào nó) cho câu hỏi liên quan Đây có phải là số nguyên tố không? . Vì chúng ta có N, M 3, nên việc kiểm tra 1 có thể được loại bỏ khỏi mẫu, làm cho số byte ít hơn so với sử dụng tích hợp.

Lưu ý: Bài kiểm tra nguyên thủy regex là bệnh lý, vui nhộn không hiệu quả. Tôi tin rằng ít nhất là O (n!), Mặc dù tôi không có thời gian để tìm ra nó ngay bây giờ. Phải mất mười hai giây để nó kiểm tra 100.001 và được nghiền trong năm hoặc mười phút vào 1.000.001 trước khi tôi hủy nó. Sử dụng / lạm dụng có nguy cơ của riêng bạn.


1
Với tốc độ đó thì có khả năng . Bạn biết đấy, 100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)sẽ mất milimet để chạy.
dùng202729

2

Võng mạc , 58 byte

\b(.+)¶\1\b

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

Hãy thử trực tuyến! Giải trình:

\b(.+)¶\1\b

Nếu cả hai đầu vào đều giống nhau, chỉ cần xóa mọi thứ và chuyển sang đầu ra 1 ở cuối.

.+
$*

Chuyển đổi sang unary.

O`

Sắp xếp theo thứ tự.

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

Mở rộng đến một phạm vi của tất cả các số.

A`^(11+)\1+$

Xóa tất cả các số tổng hợp.

^$

Nếu không còn số nào, xuất 1, nếu không 0.


2

PARI / GP, 28 byte

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

Hãy thử trực tuyến với tất cả các trường hợp thử nghiệm!

Trả về 0hoặc 1(giá trị PARI / GP "Boolean" thông thường).

Giải trình:

vphải là một vectơ (hoặc một vectơ cột hoặc một danh sách) với hai số NMdưới dạng tọa độ. Ví dụ [8, 10]. Sau đó ssẽ là "tập hợp" được tạo từ các số này, là một vectơ một tọa độ (nếu N==M) hoặc một vectơ hai tọa độ với các mục được sắp xếp khác.

Sau đó, nếu số lượng #stọa độ trong schỉ là một, chúng ta nhận được 1(sự thật). Nếu không, primessẽ trả về một vectơ của tất cả các số nguyên tố trong khoảng thời gian đóng từ s[1]đến s[2]. Phủ định! điều đó sẽ cho 1nếu vectơ trống, trong khi phủ định vectơ của một hoặc nhiều mục nhập khác không (ở đây một hoặc nhiều số nguyên tố) sẽ đưa ra 0.


2

JavaScript (ES6), 57 56 byte

Đưa đầu vào theo cú pháp currying (a)(b). Trả về 0hoặc1 .

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

Các trường hợp thử nghiệm

Làm sao?

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 bởi Giuseppe

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

Hãy thử trực tuyến!

Ứng dụng khá đơn giản của giải pháp Jelly của ETH Productstions . Điểm thú vị chính với các vectơ R boolean any(x)==all(x)tương đương với min(x)==max(x).



Ngoài ra, vì min(x)==max(x)tương đương với việc kiểm tra tất cả các phần tử is_prime(a:b)bằng nhau, chúng ta có thể sử dụng thủ thuật cuối cùng này để giảm xuống còn 46 byte với gói primeshoặc numbersgói.
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 từ Jonathan Frech

Xác định một hàm hmất trong hai intgiây và trả về 1cho sự thật và 0cho falsey

Hãy thử trực tuyến!

n là một hàm trả về 1 nếu đối số của nó không phải là số nguyên tố.

g là một macro đặt đối số thứ nhất và thứ hai của nó thành số nguyên tố tiếp theo nhỏ hơn và lớn hơn (tương ứng) nó là đối số thứ ba

hkhông gcho cả đầu vào và kiểm tra xem đầu ra có giống nhau không.


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


@JonathanFrech Đã sửa liên kết TIO.
pizzapants184


1

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

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

Hãy thử trực tuyến!

Cảm ơn Adám cho 10 byte.

Dòng ⎕CY'dfns'( C OP Y ) là cần thiết để nhập dfns ( d ynamic f unstio ns bộ sưu tập ), đi kèm với các bản cài đặt APL mặc định.

Làm thế nào nó hoạt động:

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

Toán học, 39 27 26 byte

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

Mở rộng:

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

Sử dụng:

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

Đóng góp: -12 byte của Jenny_mathy , -1 byte của Martin Ender


Điều này chỉ kiểm tra nguyên tố tiếp theo. Hãy dùng thử NextPrime [#, {- 1,1}]
J42161217

@Jenny_mathy: Tôi thấy bạn đúng. Bị bắt bởi trường hợp thử nghiệm "348, 347", hiện đã được chứng minh là đã vượt qua.
Tháp Eric

27 byte: Equal@@NextPrime[#,{-1,1}]&lấy làm đầu vào [{N,M}]hoặc nếu bạn muốn giữ đầu vào ban đầu, hãy sử dụng 30 byte này:Equal@@NextPrime[{##},{-1,1}]&
J42161217

@Jenny_mathy: Chà, ..., đầu vào được chỉ định là hai số nguyên, không phải là danh sách, vì vậy ...
Eric Towers

1
@EricTowers lấy một danh sách là tốt . Ngoài ra, bạn có thể lưu một byte bằng cách sử dụng ký hiệu infix #~NextPrime~{-1,1}.
Martin Ender

0

J , 15 byte

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

Làm thế nào nó hoạt động:

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

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.