มันเป็นเฉินตัวใหญ่หรือไม่?


27

จำนวนนั้นเป็นค่าเฉพาะสำหรับเฉินถ้าเป็นไปตามเงื่อนไขสองข้อ:

  • มันเป็นนายกตัวเอง
  • ตัวเองบวกสองเป็นได้ทั้งนายกหรือกึ่งนายก

จำนวนเฉพาะคือจำนวนที่มีตัวหารสองตัวและตัวหารเหล่านั้นประกอบด้วยตัวของมันเองและอีกตัวหนึ่ง

Semi-prime คือตัวเลขซึ่งเป็นผลคูณของสองช่วง (โปรดทราบว่า 12 = 2 * 2 * 3 ไม่ใช่แบบกึ่งนายกรัฐมนตรี แต่ 25 = 5 * 5 คือ)

งานของคุณคือการพิจารณาว่าตัวเลขเป็นตัวเอกเฉิน คุณควรส่งออกค่าความจริงใด ๆ สำหรับใช่และค่าเท็จใด ๆ สำหรับไม่ใช่

อินพุตจะเป็นจำนวนเต็มใด ๆ ที่มากกว่าหรือเท่ากับหนึ่ง มันอาจถูกนำมาเป็นสตริงอาร์เรย์อักขระหรืออาร์เรย์หรือตัวเลข

ตัวอย่าง:

101 -> truthy
223 -> falsy
233 -> truthy
1 -> falsy

นี่คือ OEIS A109611

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


เราสามารถกลับไปสู่ความTrueจริงและ2หรือFalseเพื่อความเท็จ (ค่าความเท็จที่ไม่สอดคล้องกัน) ได้หรือไม่?
Mr. Xcoder

@ Mr.Xcoder ไม่เคยบอกว่าคุณทำไม่ได้
Okx

สำหรับกึ่งนายก "ปัจจัยสองตัวที่สำคัญ" นับเป็นหลายหลากหรือไม่ คือ2 * 2 * 2 * 3 * 3กึ่งนายก? เกี่ยวกับ5 * 5อะไร
ไม่ใช่ต้นไม้

@Notatree 5*5เป็นกึ่งนายก2*2*2*3*3ไม่ใช่ ฉันพูดสองอย่างแน่
Okx

มันนับหลายหลากแล้ว (คุณอาจโต้แย้งว่า2*2*2*3*3มีปัจจัยสำคัญสองประการคือ2และ3และ5*5มีปัจจัยสำคัญเพียงอย่างเดียวคือ5) คุณอาจแก้ไขได้ในคำถามหรือไม่
ไม่ใช่ต้นไม้

คำตอบ:




6

ArnoldC , 1339 ไบต์

LISTEN TO ME VERY CAREFULLY q
I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE p
GIVE THESE PEOPLE AIR
HEY CHRISTMAS TREE c
YOU SET US UP 0
HEY CHRISTMAS TREE d
YOU SET US UP 0
HEY CHRISTMAS TREE l
YOU SET US UP p
STICK AROUND l
GET TO THE CHOPPER d
HERE IS MY INVITATION p
I LET HIM GO l
ENOUGH TALK
BECAUSE I'M GOING TO SAY PLEASE d
BULLSHIT
GET TO THE CHOPPER c
HERE IS MY INVITATION c
GET UP 1
ENOUGH TALK
YOU HAVE NO RESPECT FOR LOGIC
GET TO THE CHOPPER l
HERE IS MY INVITATION l
GET DOWN 1
ENOUGH TALK
CHILL
I'LL BE BACK c
HASTA LA VISTA, BABY
IT'S SHOWTIME
HEY CHRISTMAS TREE p
YOU SET US UP 0
GET YOUR ASS TO MARS p
DO IT NOW
I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
HEY CHRISTMAS TREE n
YOU SET US UP 0
GET YOUR ASS TO MARS n
DO IT NOW q p
HEY CHRISTMAS TREE g
YOU SET US UP 42
GET TO THE CHOPPER g
HERE IS MY INVITATION n
YOU ARE NOT YOU YOU ARE ME 2
ENOUGH TALK
BECAUSE I'M GOING TO SAY PLEASE g
GET TO THE CHOPPER p
HERE IS MY INVITATION p
GET UP 2
ENOUGH TALK
GET YOUR ASS TO MARS n
DO IT NOW q p
GET TO THE CHOPPER g
HERE IS MY INVITATION 5
LET OFF SOME STEAM BENNET n
ENOUGH TALK
BECAUSE I'M GOING TO SAY PLEASE g
TALK TO THE HAND "t"
BULLSHIT
TALK TO THE HAND "f"
YOU HAVE NO RESPECT FOR LOGIC
BULLSHIT
TALK TO THE HAND "f"
YOU HAVE NO RESPECT FOR LOGIC
YOU HAVE BEEN TERMINATED

ลองออนไลน์!

(นี่คือโพสต์แรกของฉันใน codegolf.SE โปรดแจ้งให้เราทราบหากนี่เป็นรูปแบบที่ไม่ถูกต้องฉันรู้ว่าจำนวนไบต์นี้ไม่แข่งขันนี่เป็นเพียงเพื่อความสนุก)



5

Pyth, 10 ไบต์

&P_Q>3lP+2

ลองออนไลน์!

อย่างไร?

&P_Q>3lP+2  # input: Q
        +2  # Q + 2
       P    # prime factors
    >3l     # length lower than 3?
 P_Q        # Q is prime?
&           # and both results

>. <Outgolfed>. <
Mr. Xcoder

@ Mr.Xcoder จริงฉันโพสต์ของฉัน 5 นาทีก่อน
Uriel

ใช่ไม่เห็นเพราะการเชื่อมต่ออินเทอร์เน็ตไม่ดี
Mr. Xcoder

3

Pythonพร้อมsympy ,  69  56 ไบต์

-13 ไบต์ขอบคุณ alephalpha (โดยอัปเกรดเป็น sympy 1.1 และใช้primeomega(n+2)เพื่อแทนที่sum(factorint(n+2).values()))

... รับช่วงต่อจากการลบที่ส่งโดย Gryphon

from sympy import*
lambda n:primeomega(n+2)<3*isprime(n)

ฟังก์ชั่นไม่มีชื่อส่งคืนTrueสำหรับเฉินเฉพาะช่วงเวลาและFalseอื่น ๆ

นับจำนวนปัจจัยn+2ด้วยการสรุปหลายหลากของปัจจัยหลัก

โปรดทราบว่า3จะถูกคูณด้วยisprime(n)ก่อนที่จะทำการ<เปรียบเทียบดังนั้นสำหรับผู้ที่ไม่ได้เป็นนายกnทดสอบรหัสหากn+2มี0ปัจจัยน้อยกว่า(ให้ผลเสมอFalse) ในขณะที่สำหรับไพร์มnมันจะตรวจสอบว่าn+2เป็นนายกหรือกึ่งนายกรัฐมนตรี


@Gryphon - ฉันรับช่วงต่อไปมันอาจจะสามารถเอาชนะได้โดยไม่ต้องมีการนำเข้าใด ๆ
Jonathan Allan

ฉันโตขึ้นแล้ว! 3*isprime(n)เคล็ดลับคือสิ่งที่ผมกำลังมองหาในการทำความสะอาดคำสั่งเงื่อนไข
Chase Vogeli

Ah, @icosahedron ฉันไม่ได้สังเกตคุณขอโทษ - มันคล้ายกันมากฉันจะแสดงความคิดเห็นเพื่อช่วยให้คุณปรับปรุงของคุณ อย่าลังเลที่จะปฏิบัติต่อคำตอบเช่นนี้เพียงแจ้งให้เราทราบและฉันจะลบคำตอบนี้
Jonathan Allan

ฉันคิดว่า sympy มีฟังก์ชั่นPrimeomega
alephalpha

@alephalpha ขอบคุณเพิ่งอัพเกรดเป็น 1.1 เพื่อดูว่ามันจะช่วยประหยัดไบต์!
Jonathan Allan


3

Java 8, 85 84 83 ไบต์

n->{int a=n+2,b=0,c=0,i=1;for(;i++<n;b+=n%i<1?1:0)c+=a%i<1?1:0;return n>1&b<2&c<3;}

-1 ไบต์ขอบคุณ @ OlivierGrégoireโดยใช้วิธีการวนซ้ำแทนการเรียกซ้ำ

คำอธิบาย:

ลองที่นี่

n->{            // Method with integer parameter and boolean return-type
  int a=n+2,    //  Start `a` at the input + 2
      b=0,c=0,  //  Start `b` and `c` at 0
      i=1;      //  Start `i` at 1
  for(;i++<n;   //  Loop from 1 to `n` (and raise `i` immediately by 1)
    b+=n%i<1?   //   If the input is divisible by `i`
        1       //    Raise `b` by 1
       :        //   Else:
        0)      //    Leave `b` as is
    c+=a%i<1?   //   If the input + 2 is divisible by `i`:
        1       //    Raise `c` by 1
       :        //   Else:
        0;      //    Leave `c` as is
                //  End of loop (implicit / single-line body)
  return n>1    //  Return if the input is larger than 1
         &b<2   //   And `b` is now smaller than 2
         &c<3;  //   And `c` is now smaller than 3
}               // End of method

n->{int N=n+2,f=0,F=0,d=1;for(;d++<n;f+=n%d<1?1:0)F+=N%d<1?1:0;return n>1&f<2&F<3;}รุ่นย้ำเป็นเพียงไบต์สั้น:
Olivier Grégoire


2

JavaScript (ES6), 63 61 ไบต์

g=(e,i=e)=>i--<3?1:e%i?g(e,i):g(i)+1
f=e=>e>1&g(e)<2&g(e+2)<3
Test cases:<br><textarea id=i rows=6 oninput="go()">101&#10;223&#10;233&#10;1</textarea><br><pre id=q></pre><script>window.onload=function go(){document.getElementById('q').innerHTML=document.getElementById('i').value.split('\n').map(e=>e+' -> '+f(+e)).join('\n')}</script>

กำหนดฟังก์ชั่นfที่ใช้nเป็นอาร์กิวเมนต์และส่งกลับผลลัพธ์ ฉันมีความสุขมากกับการgเปิดออก; มันนับจำนวนปัจจัยหลักในจำนวนหนึ่ง

2 ไบต์ช่วยประหยัดด้วย&เคล็ดลับของ Kevin Cruijssen

Ungolfed

Ω = (n,          // Ω(n) = number of n's prime factors, n > 1.
    i = n) =>    // Start iterating from i = n - 1. Since we'll immediately
                 // decrement i, n is used here.
    --i          // Immediately decrement i.

    < 2          // If i = 0 or i = 1, n is a prime at this point.
    ? 1 :        // Therefore Ω(n) = 1.

    n % i != 0 ? // If n is not divisible by i,
    Ω(n, i)      // try again with i := i - 1 (immediately decremented, so use i).

    : Ω(i) + 1   // n is divisible by i. Since we're counting down from n - 1
                 // and i is the first such number, i is n's largest non-trivial
                 // divisor, and thus n/i is a prime.
                 // Therefore Ω(n) = Ω(i) + Ω(n/i) = Ω(i) + 1.

is_chen = n =>     // An integer n ≥ 1 is a Chen prime if and only if:
    n > 1          // n > 1,
    & Ω(n) < 2     // Ω(n) = 1 < 2, i.e. n is a prime, and
    & Ω(n + 2) < 3 // Ω(n + 2) < 3, i.e. n + 2 is a prime or a semiprime.

คุณไม่สามารถเปลี่ยนทั้ง&&เพื่อ&? ตั้งแต่ 0/1 เป็นค่าความจริง / เท็จใน JS เช่นกัน?
Kevin Cruijssen

@KevinCruijssen ที่ดูเหมือนว่าจะทำงาน เลวร้ายเกินไป|และไม่ลัดวงจรที่อาจจะประหยัดมากยิ่งขึ้นในไบต์& g
PurkkaKoodari


2

PHP, 64 ไบต์

for($i=$n=$argn+2;--$i;$argn%$i?:$q++)$n%$i?:++$p;echo$p<4^--$q;

พิมพ์0สำหรับความจริงจำนวนเต็มอื่น ๆ สำหรับเท็จ ทำงานเป็นท่อที่มี-nRหรือลองออนไลน์

ทำให้พังถล่ม

for($i=$n=$argn+2;--$i; # loop $i from N+1 to 1
    $argn%$i?:$q++)         # if $i divides N, increment $q
    $n%$i?:++$p;            # if $i divides N+2, increment $p
echo$p<4                # $p is 1 for a prime, 3 for a semiprime
    ^--$q;              # $q is 2 for prime; so this is 1^1 (==0) for a Chen Prime

ค่าเท็จที่สอดคล้องกัน 65 ไบต์:

for($i=$n=2+$k=$argn;--$i;$k%$i?:$q++)$n%$i?:++$p;echo$p<4&$q==2;

พิมพ์1เพื่อความจริงและ0เป็นเท็จ


1

Python 3 ที่มี SymPy, 73 71 ไบต์

lambda n:(sum(factorint(n+2).values())<3)&isprime(n)
from sympy import*

ลองออนไลน์!


นี่เป็นคำตอบเวอร์ชันที่ตีกอล์ฟแล้วที่นี่ก่อนหน้านี้ แต่ดูเหมือนว่าจะถูกลบไปแล้ว


ขอบคุณ @JonathanAllan สำหรับการบันทึก 2 ไบต์!


1
... โปรดทราบด้วยว่าคุณไม่ต้องการf=การสร้างฟังก์ชั่นที่ไม่มีชื่อนั้นดีสำหรับโค้ดกอล์ฟ
Jonathan Allan


1

APL NARS 23 ตัวอักษร

{1≥⍵:0⋄(1=⍴π⍵)∧3>⍴π⍵+2}

ที่นี่π⍵คืนอาเรย์ของปัจจัยที่⍵ต่างจาก 1; การทดสอบบางอย่าง:

  f←{1≥⍵:0⋄(1=⍴π⍵)∧3>⍴π⍵+2}
  f 101
1 
  f 223
0 
  f 233
1 
  f 1
0
  f ¯10
0

1

Regex (ECMAScript), 31 ไบต์

^(?!((xx+)(\2(xx))*)(\1\4)+$)xx

ลองออนไลน์!(แสดงเชินเฉพาะทั้งหมด≤ 1,000)

รับสายของn x s regex นี้จะตรงกับถ้าหากnเป็นเฉินสำคัญ

มันอ้างว่าnมากกว่า 2 และสตริงนั้นไม่อยู่ในรูปแบบ((xx+)(\2(xx))*)(\1\4)+
regex นี้มีสองความหมายขึ้นอยู่กับว่ามีกี่ครั้ง(\2(xx))ซ้ำ
เมื่อทำซ้ำ 0 ครั้ง regex สามารถทำให้ง่าย(xx+)\1+ขึ้นซึ่งตรงกับหมายเลขคอมโพสิต
เมื่อมันถูกทำซ้ำเป็นจำนวนครั้งบวก regex จะเท่ากับ((xx+)(\2xx)+)(\1xx)+

regex นั้นต้องการคำอธิบายบางอย่าง แต่ฉันจะให้ข้อมูลเชิงลึกเล็กน้อย
ถ้าคุณไปผ่านพีชคณิตคุณพบว่า((xx+)(\2xx)+)(\1xx)+ตัวเลขการแข่งขันในรูปแบบที่a*b*c-2 ดังนั้นมันจะจับคู่ (เกือบ) เมื่อใดก็ตามที่n +2 มีมากกว่า 2 ปัจจัยหลัก (เช่นไม่ใช่นายกหรือกึ่งนายก)a≥4,b≥2,c≥2

โปรดทราบว่ามันไม่ตรงกับ 6, 16 หรือ 25 แต่สิ่งนี้ไม่สำคัญเพราะมันประกอบกันทั้งหมด

ดังนั้น(?!((xx+)(\2(xx))*)(\1\4)+$)จะจับคู่ตราบใดที่nไม่ได้คอมโพสิตและn +2 เป็นไพร์มหรือกึ่งไพร์ม
น่าเสียดายที่มี 1 (และ 0) ดังนั้นเราจึงตรวจสอบว่าnมีอย่างน้อย 2 ด้วยxx

คู่ที่แตกต่างกัน "31 byters" คือ:

^xx(?!((x*)(\2xx)+)\1?(\1xx)*$)
^(?!(xx((x*)(\3xx)+))\2?\1*$)xx

1

Ruby , 49 41 ไบต์

->n{/^(.?|((..+)\3+))(\2+|..)$/!~?l*n+=2}

ลองออนไลน์!

ขอบคุณ H.PWiz สำหรับ -8 ไบต์

อย่างไร?

สิ่งแรกรับสตริง'l'ซ้ำ n + 2 ครั้ง จากนั้นใช้ regex เพื่อตรวจสอบว่า:

  • ความยาวคือ 2 หรือ 3 (.?)(..)
  • ความยาวคือจำนวนคอมโพสิตบวก 2 ((..+)\1)(..)
  • ความยาวเป็นผลิตภัณฑ์ที่มีตัวเลขอย่างน้อย 3 ตัว ((..+)\2)\1+

ส่วนที่ 2 regex สร้างเคสที่สี่ซึ่งไม่สมเหตุสมผลและปลอดภัยที่จะเพิกเฉย: (.?)\2+ซึ่งแก้ไขเป็นสตริงว่างหรืออักขระเดี่ยวเนื่องจาก\2ว่างเปล่า


คุณสามารถผสานสองครึ่งของคุณร่วมกันอย่างใกล้ชิด:| ^((..+)\2+)(\1+|..)$นอกจากนี้ยังเป็นเรื่องบังเอิญที่คุณพยายามแก้ไขปัญหานี้ด้วย regex ในเวลาเดียวกันกับฉัน :)
H.PWiz

ฉันเชื่อว่าคุณสามารถใช้.แทน.?เนื่องจากอินพุตเป็นอย่างน้อย 1
H.PWiz



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