เราจะแบ่งปันกลุ่มเฉพาะหรือไม่?


10

คลัสเตอร์ที่สำคัญของจำนวนเต็มNสูงกว่า2ถูกกำหนดให้เป็นคู่ที่เกิดขึ้นจากนายกสูงสุดอย่างเคร่งครัดต่ำกว่าNและต่ำสุดที่สำคัญอย่างเคร่งครัดสูงกว่าN

โปรดทราบว่าต่อไปนี้คำนิยามข้างต้นถ้าจำนวนเต็มเป็นนายกตัวเองแล้วคลัสเตอร์ที่สำคัญของมันคือคู่ของจำนวนเฉพาะที่ก่อนหน้านี้และประสบความสำเร็จมัน

งาน

รับจำนวนเต็มสองจำนวนเต็มN , M ( N, M ≥ 3 ), ส่งออกค่าความจริง / เท็จตามว่าNและMมีคลัสเตอร์สำคัญเดียวกัน

นี่คือดังนั้นเป้าหมายคือเพื่อลดจำนวนไบต์ของคุณให้มากที่สุด ดังนั้นรหัสที่สั้นที่สุดในทุกภาษาการเขียนโปรแกรมชนะ

กรณีทดสอบ / ตัวอย่าง

ตัวอย่างเช่นคลัสเตอร์หลักของ9คือ[7, 11]เนื่องจาก:

  • 7คือค่าสูงสุดที่สำคัญที่สุดต่ำกว่า9และ
  • 11เป็นสำคัญต่ำสุดอย่างเคร่งครัดสูงกว่า9

ในทำนองเดียวกันกลุ่มเฉพาะของ67คือ[61, 71](โปรดทราบว่า67เป็นนายกรัฐมนตรี)

คู่ที่แท้จริง

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

คู่ที่เป็นเท็จ

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

ค่าความจริง / เท็จต้องเป็นสองค่าที่แตกต่างกันหรือสามารถกำหนดการแมปจากเอาท์พุทของโปรแกรมของพวกเขาไปยังค่าความจริง / ค่าเท็จและเอาท์พุท
Jonathan Frech

@JathanathanFrech Truthy / Falsy ต่อการตัดสินใจปัญหาความหมายไม่จำเป็นต้องสอดคล้อง แต่บิดเบือนและความจริง / เท็จ
นาย Xcoder

คำตอบ:


14

เยลลี่ , 6 4 3 5 4 ไบต์

rÆPE

ลองออนไลน์! หรือลองกรณีทดสอบทั้งหมด

มันทำงานอย่างไร

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

ใช้งานได้เพราะตัวเลขสองตัวมีกลุ่มนายกที่แตกต่างกันถ้ามันมีไพรม์ระหว่างพวกเขา นอกเสียจากว่าตัวเลขทั้งสองจะเหมือนกันซึ่งในกรณีนี้Eจะคืนค่า1อย่างไรก็ตามรายการทั้งหมดในอาร์เรย์รายการเดียวมีค่าเท่ากัน


7
แหล่งที่มาของโปรแกรมของคุณดูไม่เป็นมิตร ...
สแตนดีด

2

Perl 6 , 52 ไบต์

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

ทดสอบมัน

ขยาย:

{  # 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 ไบต์

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

ลองออนไลน์!

ใช้การทดสอบเบื้องต้น regex ที่น่ากลัวจากคำตอบของฉัน (ซึ่งฉันลืมจนกระทั่งฉันคลิกที่มัน) กับคำถามที่เกี่ยวข้องหมายเลขนี้มีค่าหรือไม่ . เนื่องจากเรามี N, M ≥ 3 การตรวจสอบ 1 สามารถลบออกจากรูปแบบได้ทำให้จำนวนไบต์น้อยกว่าการใช้บิวด์อิน

หมายเหตุ: การทดสอบแบบดั้งเดิมของ regex มีพยาธิสภาพและไม่มีประสิทธิภาพอย่างสนุกสนาน ฉันเชื่อว่าอย่างน้อย O (n!) ถึงแม้ว่าฉันไม่มีเวลาที่จะคิดในตอนนี้ ใช้เวลาสิบสองวินาทีในการตรวจสอบ 100,001 และบดเป็นเวลาห้าหรือสิบนาทีใน 1,000,001 ก่อนที่ฉันจะยกเลิก ใช้ / ละเมิดในความเสี่ยงของคุณเอง


1
ในอัตราที่มันเป็นไปได้ คุณรู้ไหมว่า100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)จะใช้เวลานับพันปีในการทำงาน
user202729

2

เรติน่า 58 ไบต์

\b(.+)¶\1\b

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

ลองออนไลน์! คำอธิบาย:

\b(.+)¶\1\b

หากทั้งสองอินพุทเหมือนกันเพียงแค่ลบทุกอย่างและผ่านไปที่ 1 ในตอนท้าย

.+
$*

แปลงเป็นเอก

O`

เรียงลำดับ

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

ขยายไปยังช่วงของตัวเลขทั้งหมด

A`^(11+)\1+$

ลบหมายเลขรวมทั้งหมด

^$

หากไม่มีตัวเลขเหลือเอาท์พุท 1 มิฉะนั้นเป็น 0


2

PARI / GP ขนาด 28 ไบต์

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

ลองออนไลน์กับทุกกรณีทดสอบ!

ส่งคืน0หรือ1 (ปกติค่า PARI / GP "Boolean")

คำอธิบาย:

vต้องเป็นเวกเตอร์ (หรือเวกเตอร์คอลัมน์หรือรายการ) ที่มีตัวเลขสองตัวNและMเป็นพิกัด [8, 10]เช่น จากนั้นsจะเป็น "ชุด" ที่ทำจากตัวเลขเหล่านี้ซึ่งเป็นเวกเตอร์หนึ่งพิกัด (ถ้าN==M) หรือเวกเตอร์สองพิกัดที่มีรายการที่เรียงลำดับไว้เป็นอย่างอื่น

ถ้าจำนวน#sพิกัดsเป็นค่าเดียวเราจะได้1(จริง) มิฉะนั้นprimesจะกลับเวกเตอร์ของช่วงเวลาทั้งหมดในช่วงเวลาปิดจากไปs[1] s[2]ปฏิเสธ!ที่จะให้1ถ้าเวกเตอร์ที่ว่างเปล่าในขณะที่ปฏิเสธของเวกเตอร์ของหนึ่งหรือไม่ใช่ศูนย์รายการขึ้นไป (ที่นี่หนึ่งหรือช่วงเวลาอื่น ๆ ) 0จะให้


2

JavaScript (ES6) 57 56 ไบต์

(a)(b)จะเข้าในไวยากรณ์ currying ผลตอบแทนหรือ01

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

กรณีทดสอบ

อย่างไร?

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 ไบต์

-17 โดยจูเซปเป้

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

ลองออนไลน์!

แอพลิเคชันสวยเรียบง่ายของการแก้ปัญหาวุ้น ETHProductions' หลัก Takeaway ที่น่าสนใจคือการเป็นที่กับ R เวกเตอร์บูลเทียบเท่ากับany(x)==all(x)min(x)==max(x)



นอกจากนี้ตั้งแต่min(x)==max(x)เทียบเท่ากับการตรวจสอบว่าองค์ประกอบทั้งหมดในis_prime(a:b)เท่ากันเราสามารถใช้เคล็ดลับสุดท้ายที่จะได้รับมันลงไป46 ไบต์กับทั้งprimesหรือnumbersแพคเกจ
Giuseppe

2

C (gcc), 153 146 bytes

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

กำหนดฟังก์ชั่นhที่ใช้เวลาในสองintวินาทีและผลตอบแทน1สำหรับความจริงและ0เพื่อความเท็จ

ลองออนไลน์!

n เป็นฟังก์ชั่นที่คืนค่า 1 ถ้าอาร์กิวเมนต์นั้นไม่สำคัญ

g เป็นแมโครที่ตั้งค่าอาร์กิวเมนต์ตัวแรกและตัวที่สองให้กับค่าถัดไปที่น้อยกว่าและมากกว่า (ตามลำดับ) เป็นอาร์กิวเมนต์ที่สาม

hทำgทั้งอินพุตและตรวจสอบว่าเอาต์พุตเหมือนกันหรือไม่


return a==c&&b==d;return!(a-c|b-d);สามารถ
Jonathan Frech

146 ไบต์
Jonathan Frech

@JonathanFrech แก้ไขลิงก์ TIO
pizzapants184


1

APL (Dyalog Unicode) , 18 + 16 = 34 24 ไบต์

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

ลองออนไลน์!

ขอขอบคุณAdámเป็นเวลา 10 ไบต์

จำเป็นต้องใช้บรรทัด⎕CY'dfns'( C OP Y ) เพื่อนำเข้าคอลเลกชันdfns ( d ynamic f unctio ns ) ซึ่งมาพร้อมกับการติดตั้ง Dyalog APL เริ่มต้น

มันทำงานอย่างไร:

∧/=/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 ไบต์

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

ขยาย:

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

การใช้งาน:

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

การสนับสนุน: -12 ไบต์โดยJenny_mathy , -1 ไบต์โดยMartin Ender


นี้จะตรวจสอบเฉพาะนายกต่อไป ลอง NextPrime [#, {- 1,1}]
J42161217

@ Jenny_mathy: ฉันเห็นว่าคุณถูกต้อง จับได้จากกรณีทดสอบ "348, 347" ซึ่งแสดงให้เห็นว่าผ่านไปแล้ว
Eric Towers

27 ไบต์: Equal@@NextPrime[#,{-1,1}]&ใช้เป็นอินพุต[{N,M}]หรือถ้าคุณต้องการให้อินพุตดั้งเดิมใช้ 30 ไบต์นี้:Equal@@NextPrime[{##},{-1,1}]&
J42161217

@ Jenny_mathy: เอ่อ ... ข้อมูลที่ระบุคือจำนวนเต็มสองรายการไม่ใช่รายการ ...
Eric Towers

1
@EricTowers ถ่ายรายการจะปรับ #~NextPrime~{-1,1}นอกจากนี้คุณยังสามารถบันทึกไบต์โดยใช้สัญกรณ์มัด
Martin Ender

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.