क्या यह एक चेन प्राइम है?


27

एक संख्या एक चेन प्राइम है अगर यह दो शर्तों को पूरा करता है:

  • यह स्वयं प्रधान है
  • खुद से अधिक दो या तो एक प्रमुख या एक अर्ध प्रधान है।

एक प्राइम एक ऐसी संख्या होती है, जहां इसके दो विभाजक होते हैं और उन विभाजकों में स्वयं और एक होते हैं।

एक सेमी-प्राइम एक संख्या है जो दो प्राइम का उत्पाद है। (ध्यान दें कि 12 = 2 * 2 * 3 अर्ध-प्रधान नहीं है, लेकिन 25 = 5 * 5 है)।

आपका कार्य यह निर्धारित करना है कि क्या कोई संख्या एक चेन प्राइम है। आपको हां के लिए किसी भी सत्य मूल्य का उत्पादन करना चाहिए और किसी के लिए कोई मिथ्या मूल्य नहीं होना चाहिए।

इनपुट किसी भी पूर्णांक से अधिक या एक के बराबर होगा। इसे एक स्ट्रिंग, कैरेक्टर ऐरे या एक ऐरे या अंक के रूप में भी लिया जा सकता है।

उदाहरण:

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

यह OEIS A109611 है

यह, मैं I सोफी जर्मेन प्राइम से प्रेरित है ? जो, दुर्भाग्य से, एक डुप्लिकेट के रूप में बंद हो गया, इसलिए मैं कुछ हद तक संबंधित चुनौती पोस्ट कर रहा हूं जो डुप्लिकेट नहीं है।


क्या हम Trueसच्चाई और 2या Falseझूठे (असंगत झूठे मूल्यों) के लिए लौट सकते हैं ?
श्री Xcoder

@ Mr.Xcoder ने कहा कि आप कभी भी नहीं कर सकते
Okx

एक सेमी-प्राइम के लिए, "वास्तव में दो प्रमुख कारक" बहुलता की गणना करते हैं? है 2 * 2 * 2 * 3 * 3एक अर्द्ध प्रधानमंत्री? किस बारे में 5 * 5?
एक पेड़ नहीं

@ नोटात्री 5*5अर्ध प्रधान है, 2*2*2*3*3नहीं है। मैंने कहा बिल्कुल दो।
ओकेक्स

तो यह गुणा, गिनती करता है? (आप तर्क दे सकते हैं कि 2*2*2*3*3इसके दो प्रमुख कारक हैं, अर्थात् 2और 3, और 5*5एक प्रमुख कारक है, जिसका नाम है 5।) हो सकता है कि आप इस प्रश्न को संपादित कर सकें?
एक पेड़ नहीं

जवाबों:




6

अर्नोल्ड , 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

इसे ऑनलाइन आज़माएं!

(यह कोडगॉल्फ पर मेरी पहली पोस्ट है। कृपया, मुझे बताएं कि क्या यह गलत तरीके से प्रारूपित है। मुझे पता है कि यह बाइट गिनती प्रतिस्पर्धी नहीं है, यह सिर्फ मनोरंजन के लिए है।)



5

अजगर, 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

>। <बहिर्गामी>। <
श्री एक्सकोडर

@ Mr.Xcoder वास्तव में, मैंने 5 मिनट पहले
Uriel

हाँ, खराब इंटरनेट कनेक्शन के कारण इसे नहीं देखा
मिस्टर एक्सकोडर

3

सिम्पी के साथ अजगर ,  69  56 बाइट्स

-13 बाइट्स alephalpha के लिए धन्यवाद (सिम्पी 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से कम है , जबकि प्राइम के लिए यह जांचता है कि क्या प्राइम या सेमी-प्राइम है।0Falsenn+2


@ ग्रीफॉन - मैंने इसे संभाला, लेकिन यह बिना किसी आयात के बीट हो सकता है।
जोनाथन एलन

मैं बहक गया हूँ! 3*isprime(n)चाल है कि मैं क्या सशर्त बयान को साफ करने में लिए देख रहा था है।
वोगेली जूल

आह, @icosahedron, मैंने आपका ध्यान नहीं दिया, क्षमा करें - यह ऐसा ही है, मैंने आपको टिप्पणी करने के लिए कहा था कि आपको सुधारने में मदद मिलेगी। इस उत्तर को इस तरह से मानने के लिए स्वतंत्र महसूस करें, बस मुझे बताएं और मैं इसे हटा दूंगा।
जोनाथन एलन

मुझे लगता है कि सिम्पी का एक प्राइममेगा फंक्शन है।
एलेफल्फा

@alephalpha धन्यवाद, इसे देखने के लिए केवल 1.1 पर अपग्रेड किया गया, जो बाइट्स को बचाएगा!
जोनाथन एलन


3

जावा 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 बाइट्स @ पुनरावृत्ति के बजाय एक पुनरावृत्ति दृष्टिकोण का उपयोग करके @ ओलिवियरग्रेयर के लिए धन्यवाद ।

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

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;}:।
ओलिवियर ग्रेजायर


2

जावास्क्रिप्ट (ईएस 6), 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 बाइट्स केविन क्रूज़सेन की &चाल के लिए धन्यवाद बचाता है ।

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.

क्या आप दोनों &&को नहीं बदल सकते &? चूंकि JS में सत्य / असत्य मान 0/1 हैं?
केविन क्रूज़सेन

@ केविनक्रूजसेन काम करने लगता है। बहुत बुरा |और &शॉर्ट-सर्किट नहीं, कि और भी अधिक बाइट्स में बचा सकता है g
१६:


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

सिम्पी के साथ पायथन 3 , 73 71 बाइट्स

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

इसे ऑनलाइन आज़माएं!


यह पहले से यहां पोस्ट किए गए उत्तर का एक अधिक-गोल्फ संस्करण है, लेकिन ऐसा लगता है कि इसे हटा दिया गया है।


2 बाइट्स बचाने के लिए @JonathanAllan को धन्यवाद!


1
... यह भी ध्यान दें कि आपको f=एक अनाम फ़ंक्शन बनाने की आवश्यकता नहीं है , कोड-गोल्फ के लिए ठीक है।
जोनाथन एलन


1

एपीएल नार, 23 वर्ण

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

यहां Here 1 से भिन्न array के कारकों की सरणी लौटाता है; कुछ परीक्षण:

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

1

रेगेक्स (ECMAScript), 31 बाइट्स

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

इसे ऑनलाइन आज़माएं! (सभी चेन प्राइम दिखाते हुए imes 1000)

N के एक स्ट्रिंग को देखते हुए xयह रेगेक्स मैच करेगा अगर और केवल अगर n एक चेन प्राइम है।

यह दावा करता है कि n 2 से अधिक है और यह स्ट्रिंग के रूप का नहीं है। ((xx+)(\2(xx))*)(\1\4)+
इस regex के दो अर्थ हैं, यह इस बात पर निर्भर करता है कि कितनी बार (\2(xx))दोहराया गया है।
जब इसे 0 बार दोहराया जाता है, तो रेगेक्स को सरल बनाया जा सकता है (xx+)\1+, जो मिश्रित संख्याओं से मेल खाता है।
जब इसे बार-बार सकारात्मक संख्या में दोहराया जाता है, तो रेगेक्स के बराबर होता है((xx+)(\2xx)+)(\1xx)+

उस रेगेक्स को कुछ स्पष्टीकरण की आवश्यकता है, हालांकि, मैं थोड़ी जानकारी प्रदान करूंगा।
यदि आप बीजगणित से गुजरते हैं, तो आप पाते हैं कि ((xx+)(\2xx)+)(\1xx)+फॉर्म की संख्या से मेल खाता है a*b*c-2जहां a≥4,b≥2,c≥2
तो यह मैच होगा (लगभग) जब भी n +2 में 2 से अधिक प्रमुख कारक होते हैं। (यानी न तो प्राइम और न ही सेमी-प्राइम)
ध्यान दें कि यह 6, 16 या 25 से मेल नहीं खाता है, लेकिन यह कोई फर्क नहीं पड़ता, क्योंकि वे सभी समग्र हैं।

तो (?!((xx+)(\2(xx))*)(\1\4)+$)मैच तब तक होगा जब तक n समग्र नहीं है, और n +2 या तो प्रधान या अर्ध-प्रधान है।
दुर्भाग्य से इसमें 1 (और 0) शामिल हैं, इसलिए हम फिर से जांचते हैं कि n कम से कम 2 के साथ हैxx

विभिन्न "31-बायर्स" के कुछ जोड़े हैं:

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

1

रूबी , 49 41 बाइट्स

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

इसे ऑनलाइन आज़माएं!

धन्यवाद H.Wiz -8 बाइट्स के लिए

कैसे?

पहली बात, 'l'बार-बार n + 2 बार स्ट्रिंग प्राप्त करें । तो एक regex लागू करने के लिए जाँच करें कि:

  • लंबाई 2 या 3 है (.?)(..)
  • लंबाई एक मिश्रित संख्या प्लस 2 है ((..+)\1)(..)
  • लंबाई कम से कम 3 नंबर का उत्पाद है ((..+)\2)\1+

2 रेगेक्स पार्ट्स एक चौथा मामला उत्पन्न करते हैं जो समझ में नहीं आता है और इसे अनदेखा करना सुरक्षित है:, (.?)\2+जो खाली स्ट्रिंग या एकल वर्ण के लिए हल करता है क्योंकि \2खाली है।


आप अपने के दो हिस्सों विलय कर सकते हैं |एक साथ करीब: ^((..+)\2+)(\1+|..)$। इसके अलावा, एक साफ संयोग है कि आपने मेरे साथ एक ही समय में रेगेक्स के साथ इस समस्या का प्रयास किया :)
H.PWiz

मुझे विश्वास है कि आप .इसके बजाय उपयोग कर सकते हैं .?क्योंकि इनपुट हमेशा कम से कम 1 है
H.PWiz

0

जूलिया, 59 बाइट्स

x->((0∉x%(2:x-1))&(length(find(x->x==0,(x+2)%(2:x)))<=2))


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.