क्या यह एक निरंतर-प्रधान / निरंतर-प्रतिपादक संख्या है?


22

कुछ समय पहले, मेरी नज़र २ had००० के प्रधान कारक पर थी:

27000 = 2 3 × 3 3 × 5 3

इसके बारे में दो खास बातें हैं:

  • लगातार प्राइम : प्राइम लगातार होते हैं: 2 1 अभाज्य है, 3 दूसरा अभाज्य है, 5 तीसरा प्रधान है।
  • स्थिर-प्रतिपादक : प्रतिपादक प्रत्येक अभाज्य (हमेशा 3) के लिए समान होता है

गणितीय रूप से व्यक्त:

एक पूर्णांक x एक निरंतर अभाज्य / स्थिर-प्रतिपादक संख्या है अगर वहाँ कड़ाई से धनात्मक पूर्णांक n , k , m ऐसा मौजूद है कि x = p n m × p n +1 m × ... × p n + k m , जहाँ p j है j वें प्रधानमंत्री

आपका कार्य यह परखना है कि क्या सकारात्मक पूर्णांक इन शर्तों को पूरा करता है।

इनपुट:

एक सकारात्मक पूर्णांक> 1, किसी भी उचित रूप में।

आउटपुट:

दो मूल्यों में से एक, जिनमें से कम से कम एक को स्थिर रहना पड़ता है, यह दर्शाता है कि इनपुट एक निरंतर-प्रधान / निरंतर-प्रतिपादक संख्या है।

बढ़त के मामले:

  • प्रधान सत्य हैं, क्योंकि प्रधान p का गुणनखण्ड p 1 है
  • अन्य संख्याएँ जिन्हें p m के रूप में लिखा जा सकता है जहाँ p एक अभाज्य है, सत्य भी है।

नियम:

  • मानक खामियां लागू होती हैं।
  • पूर्णांक अतिप्रवाह के बारे में कोई चिंता नहीं है, लेकिन 255 तक की संख्या को काम करना चाहिए।
  • बाइट्स में सबसे छोटा कोड जीतता है।

परीक्षण के मामलों:

Truthy:

2
3
4
5
6
7
8
9
11
13
15
27000
456533

Falsy:

10
12
14
72
10000000

यहाँ कुछ परीक्षण मामलों को उत्पन्न करने वाली एक अजगर लिपि है।

तथ्य यह है कि मैंने एक जवाब स्वीकार किया है, इसका मतलब यह नहीं है कि चुनौती खत्म हो गई है; विजेता अभी भी बदल सकता है!


आप संभवत: इस तरह से सभी तरह के नंबरों की सूची बनाकर जांच सकते हैं कि इनपुट सूची में है या नहीं
इंजीनियर टोस्ट

@EngineerToast में असीम रूप से कई सत्य संख्याएँ हैं।
एलेक्सिस ओल्सन

@AlexisOlson ज़रूर, लेकिन एक परिमित जिसे कई भाषाओं द्वारा पूर्णांक के रूप में संभाला जा सकता है।
इंजीनियर टोस्ट

आपकी गणितीय अभिव्यक्ति में Pj x = Pn^mभाग से संबंधित नहीं है । मैं मान रहा हूं कि Pn n-th प्राइम है
Veskah

@Veskah n एक विशिष्ट मूल्य (के प्रथम प्रधानमंत्री विभाजन सूचक है एक्स ,) तो कह Pn है n वें प्रधानमंत्री अजीब है अगर आप भी सूचित करते हैं कि चाहते Pn +1 है n + 1 मई के प्रधानमंत्री।
डेनिस

जवाबों:


13

05AB1E , 4 बाइट्स

Ó0ÛË

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

व्याख्या

Ó     # get a list of prime exponents
 0Û   # remove leading zeroes
   Ë  # all remaining elements are equal

ÎÓKËßक्या मैं इसके अलावा किसी और के बारे में सोच सकता हूं, अच्छा है ... मैं सोच रहा था लेकिन यह वही करता है जो मैंने सोचा था।
मैजिक ऑक्टोपस

7

रेगेक्स (ECMAScript), 276 205 201 193 189 बाइट्स

ECMAScript regex के साथ हल करने के लिए विभिन्न प्रमुख कारकों की गुणकों (घातांकियों) की तुलना करना एक दिलचस्प समस्या है - लूप के पुनरावृत्तियों के माध्यम से बने रहने वाले बैकरेफ़रेंस की कमी से कुछ भी गिनना एक चुनौती है। यहां तक ​​कि अगर प्रश्न में संख्यात्मक विशेषता की गिनती संभव है, तो अक्सर बेहतर गोल्फ के लिए एक अधिक अप्रत्यक्ष दृष्टिकोण होता है।

अपने अन्य ECMA रेगेक्स पोस्ट के साथ, मैं एक स्पॉइलर चेतावनी दूंगा : मैं अत्यधिक सीखने की सलाह देता हूं कि ECMAScript regex में अनैतिक गणितीय समस्याओं को कैसे हल किया जाए। यह मेरे लिए एक आकर्षक यात्रा रही है, और मैं इसे किसी ऐसे व्यक्ति के लिए खराब नहीं करना चाहता, जो संभवतः स्वयं इसे आज़माना चाहते हैं, विशेष रूप से संख्या सिद्धांत में रुचि रखने वाले। एक के बाद एक हल करने के लिए लगातार बिगाड़ने-टैग की गई अनुशंसित समस्याओं की सूची के लिए यह पहले वाला पोस्ट देखें

तो आगे पढ़िए नहीं अगर आप नहीं चाहते कि आपके लिए कुछ उन्नत यूरीज़ रेगेक्स मैजिक खराब हो जाए । यदि आप स्वयं इस जादू का पता लगाने के लिए शॉट लेना चाहते हैं, तो मैं उच्च पद पर उल्लिखित उस पोस्ट में उल्लिखित ECMAScript रेगेक्स में कुछ समस्याओं को हल करके शुरू करने की सलाह देता हूं।

मैं पहले से विकसित एक रेगेक्स से मुख्य पेलोड इस चुनौती के लिए बहुत ही लागू हुआ। यही वह पुंज है जो उच्चतम गुणन का प्रधान (ओं) को पाता है । उसके लिए मेरा पहला समाधान बहुत लंबा था, और मैंने बाद में इसे चरणों में नीचे गिरा दिया, पहले इसे आणविक लुकहेड का उपयोग करने के लिए फिर से लिखना , और फिर इसे आणविक लुकाहेड की कमी के आसपास काम करने के लिए एक उन्नत तकनीक का उपयोग करके सादे ECMAScript पर वापस पोर्ट करना , और बाद में। मूल सादे ECMAScript समाधान की तुलना में यह बहुत छोटा होने के कारण इसे नीचे गिराता है।

इस समस्या पर लागू होने वाले रेगेक्स का वह हिस्सा पहला कदम है, जो N का सबसे छोटा कारक Q को खोजता है, जो इसके सभी प्रमुख कारकों को साझा करता है। एक बार जब हमारे पास यह संख्या होती है, तो हमें केवल यह दिखाना होगा कि N एक "स्थिर-प्रतिपादक संख्या" है, N को Q द्वारा विभाजित किया जाता है, जब तक कि हम अब और नहीं कर सकते; यदि परिणाम 1 है, तो सभी अपराध समान बहुलता वाले हैं।

क्यू खोजने के लिए मेरे पहले से विकसित एल्गोरिथम का उपयोग करके जवाब प्रस्तुत करने के बाद, मुझे एहसास हुआ कि इसकी गणना पूरी तरह से अलग तरीके से की जा सकती है: एन का सबसे बड़ा वर्ग-मुक्त कारक खोजें (मेरे कार्मिकेल नंबर रेगेक्स के समान एल्गोरिथ्म का उपयोग करके )। जैसा कि यह पता चला है, यह आणविक लुकहेड और चर-लंबाई के लुकबाइंड की कमी के आसपास कदम रखने के मामले में * कोई कठिनाई नहीं देता है (पहले इस्तेमाल की गई उन्नत तकनीक में खींचने की कोई जरूरत नहीं है), और 64 बाइट्स कम है! इसके अतिरिक्त यह वर्ग-विशेष N और Prime N को विभिन्न विशेष मामलों के रूप में मानने की जटिलता को समाप्त करता है, इस समाधान से एक और 7 बाइट्स को छोड़ देता है।

(अभी भी अन्य समस्याएं बनी हुई हैं जिन्हें पहले क्यू की गणना के लिए गोल्फ के लिए उन्नत तकनीक की आवश्यकता होती थी, लेकिन वर्तमान में उनमें से कोई भी मेरे पीपीसीजी पदों द्वारा प्रतिनिधित्व नहीं करता है।)

मैंने बहु-परीक्षण परीक्षणों को लगातार होने वाले परीक्षण से पहले रखा क्योंकि उत्तरार्द्ध बहुत धीमा है; ऐसे परीक्षण लगाना जो अधिक तेज़ी से विफल हो सकते हैं पहले समान रूप से वितरित इनपुट के लिए रेगेक्स को तेजी से बनाता है। पहले इसे लगाने के लिए बेहतर गोल्फ भी है, क्योंकि इसमें अधिक बैकरेफरेंस का उपयोग किया जाता है (जो कि यदि वे दोहरे अंकों में अधिक होते हैं)।

मैं इस रेगेक्स (193 → 189) से 4 बाइट्स को छोड़ने में सक्षम था, जो कि ग्रिम द्वारा पाए गए एक ट्रिक का उपयोग करके इस मामले में विभाजन को छोटा कर सकता है कि भागफल को विभाजक से अधिक या उसके बराबर होने की गारंटी है।

^(?=(|(x+)\2*(?=\2$))((?=(xx+?)\4*$)(?=(x+)(\5+$))\6(?!\4*$))*x$)(?=.*$\2|((?=((x*)(?=\2\9+$)x)(\8*$))\10)*x$)(?!(((x+)(?=\13+$)(x+))(?!\12+$)(x+))\11*(?=\11$)(?!(\15\14?)?((xx+)\18+|x?)$))

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

# For the purposes of these comments, the input number = N.
^

# Assert that all of N's prime factors are of equal multiplicity
# Step 1: Find Q, the largest square-free factor of N (which will also be the smallest
# factor of N that has all the same prime factors as N) and put it in \2.
# If N is square-free, \2 will be unset.
(?=
    # Search through all factors of N, from largest to smallest, searching for one that
    # satisfies the desired property. The first factor tried will be N itself, for which
    # \2 will be unset.
    (|(x+)\2*(?=\2$))     # for factors < N: \2 = factor of N; tail = \2
    # Assert that tail is square-free (its prime factors all have single multiplicity)
    (
        (?=(xx+?)\4*$)    # \4 = smallest prime factor of tail
        (?=(x+)(\5+$))    # \5 = tail / \4 (implicitly); \6 = tool to make tail = \5
        \6                # tail = \5
        (?!\4*$)          # Assert that tail is no longer divisible by \4, i.e. that that
                          # prime factor was of exactly single multiplicity.
    )*x$
)
# Step 2: Require that either \2 is unset, or that the result of repeatedly
# dividing tail by \2 is 1.
(?=
    .*$\2
|
    (
        # In the following division calculation, we can skip the test for divisibility
        # by \2-1 because it's guaranteed that \2 <= \8. As a result, we did not need to
        # capture \2-1 above, and can use a better-golfed form of the division.
        (?=
            (              # \8 = tail / \2
                (x*)       # \9 = \8-1
                (?=\2\9+$)
                x
            )
            (\8*$)         # \10 = tool to make tail = \8
        )
        \10               # tail = \8
    )*
    x$                    # Require that the end result is 1
)

# Assert that there exists no trio of prime numbers such that N is divisible by the
# smallest and largest prime but not the middle prime.
(?!
    (                          # \11 = a factor of N
        (                      # \12 = a non-factor of N between \11 and \13
            (x+)(?=\13+$)      # \13 = a factor of N smaller than \11
            (x+)               # \14 = tool (with \15) to make tail = \13
        )
        (?!\12+$)
        (x+)                   # \15 = tool to make tail = \12
    )
    \11*(?=\11$)               # tail = \11

    # Assert that \11, \12, and \13 are all prime
    (?!
        (\15\14?)?             # tail = either \11, \12, or \13
        ((xx+)\18+|x?)$
    )
)


* यह अभी भी आणविक लुकहैड के साथ क्लीनर है, एन के लिए कोई विशेष मामला नहीं है वर्ग-मुक्त होने के साथ। यह 6 बाइट्स, एक उपज चला जाता है 195 187 183 बाइट समाधान:

^(?=(?*(x+))\1*(?=\1$)((?=(xx+?)\3*$)(?=(x+)(\4+$))\5(?!\3*$))*x$)(?=((?=((x*)(?=\1\8+$)x)(\7*$))\9)*x$)(?!(((x+)(?=\12+$)(x+))(?!\11+$)(x+))\10*(?=\10$)(?!(\14\13?)?((xx+)\17+|x?)$))

# For the purposes of these comments, the input number = N.
^

# Assert that all of N's prime factors are of equal multiplicity
# Step 1: Find Q, the largest square-free factor of N (which will also be the smallest
# factor of N that has all the same prime factors as N) and put it in \1.
(?=
    (?*(x+))              # \1 = proposed factor of N
    \1*(?=\1$)            # Assert that \1 is a factor of N; tail = \1
    # Assert that tail is square-free (its prime factors all have single multiplicity)
    (
        (?=(xx+?)\3*$)    # \3 = smallest prime factor of tail
        (?=(x+)(\4+$))    # \4 = tail / \3 (implicitly); \5 = tool to make tail = \4
        \5                # tail = \4
        (?!\3*$)          # Assert that tail is no longer divisible by \3, i.e. that that
                          # prime factor was of exactly single multiplicity.
    )*x$
)
# Step 2: Require that the result of repeatedly dividing tail by \1 is 1.
(?=
    (
        # In the following division calculation, we can skip the test for divisibility
        # by \1-1 because it's guaranteed that \2 <= \8. As a result, we did not need to
        # capture \1-1 above, and can use a better-golfed form of the division.
        (?=
            (             # \7 = tail / \1
                (x*)      # \8 = \7-1
                (?=\1\8+$)
                x
            )
            (\7*$)        # \9 = tool to make tail = \7
        )
        \9                # tail = \7
    )*
    x$                    # Require that the end result is 1
)

# Assert that there exists no trio of prime numbers such that N is divisible by the
# smallest and largest prime but not the middle prime.
(?!
    (                          # \10 = a factor of N
        (                      # \11 = a non-factor of N between \10 and \12
            (x+)(?=\12+$)      # \12 = a factor of N smaller than \10
            (x+)               # \13 = tool (with \14) to make tail = \12
        )
        (?!\11+$)
        (x+)                   # \14 = tool to make tail = \11
    )
    \10*(?=\10$)               # tail = \10

    # Assert that \10, \11, and \12 are all prime
    (?!
        (\14\13?)?             # tail = either \10, \11, or \12
        ((xx+)\17+|x?)$
    )
)

यहाँ इसे चर-लंबाई के साथ देखा गया है:

रेगेक्स (ECMAScript 2018), 198 195 194 186 182 बाइट्स

^(?=(x+)(?=\1*$)(?<=^x((?<!^\5*)\3(?<=(^\4+)(x+))(?<=^\5*(x+?x)))*))((?=((x*)(?=\1\8+$)x)(\7*$))\9)*x$(?<!(?!(\14\16?)?((xx+)\12+|x?)$)(?<=^\13+)((x+)(?<!^\15+)((x+)(?<=^\17+)(x+))))

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

# For the purposes of these comments, the input number = N.
^

# Assert that all of N's prime factors are of equal multiplicity
# Step 1: Find Q, the largest square-free factor of N (which will also be the smallest
# factor of N that has all the same prime factors as N) and put it in \1.
(?=
    (x+)(?=\1*$)      # \1 = factor of N; head = \1
    (?<=              # This is evaluated right-to-left, so please read bottom to top.
        ^x
        (
            (?<!^\5*)        # Assert that head is no longer divisible by \6, i.e. that
                             # that prime factor was of exactly single multiplicity.
            \3               # head = \4
            (?<=(^\4+)(x+))  # \4 = head / \5 (implicitly); \3 = tool to make head = \4
            (?<=^\5*(x+?x))  # \5 = smallest prime factor of head
        )*
    )
)
# Step 2: Require that the result of repeatedly dividing tail by \1 is 1.
(
    # In the following division calculation, we can skip the test for divisibility
    # by \1-1 because it's guaranteed that \2 <= \8. As a result, we did not need to
    # capture \1-1 above, and can use a better-golfed form of the division.
    (?=
        (             # \7 = tail / \1
            (x*)      # \8 = \7-1
            (?=\1\8+$)
            x
        )
        (\7*$)        # \9 = tool to make tail = \7
    )
    \9                # tail = \7
)*
x$                    # Require that the end result is 1

# Assert that there exists no trio of prime numbers such that N is divisible by the
# smallest and largest prime but not the middle prime.
# This is evaluated right-to-left, so please read bottom to top, but switch back to
# reading top to bottom at the negative lookahead.
(?<!
    # Assert that \13, \15, and \17 are all prime.
    (?!
        (\14\16?)?           # tail = either \13, \15, or \17
        ((xx+)\12+|x?)$
    )

    (?<=^\13+)
    (                        # tail = \13
        (x+)                 # \14 = tool to make tail = \15
        (?<!^\15+)
        (
            (x+)             # \16 = tool (with \14) to make tail = \17
            (?<=^\17+)(x+)   # \17 = a factor of N smaller than \13
        )                    # \15 = a non-factor of N between \13 and \17
    )                        # \13 = a factor of N
)

आप के .*$\2साथ प्रतिस्थापित कर सकते हैं\2^
H.PWiz

हालाँकि, मेरा मानना ​​है कि यह मान्य है:^(?=(|(x+)\2*(?=\2$))(((?=(xx+?)\5*$)(?=(x+)(\6+$))\7(?!\5*$))*x$))(?!(((xx+)(?=\10+$)(x+))(?!\9+$)(x+))\8*(?=\8$)(?!(\12\11?)?(xx+)\14+$))((?=((x*)(?=\2\17+$)x)(\16*$))\19)*\3$
H.PWiz

हालांकि इष्टतम के करीब नहीं लगता
H.PWiz

6

जेली , 13 6 5 बाइट्स

ÆEt0E

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

अभी भी outgolfed ... (धन्यवाद 1 बाइट के लिए एरिक)


व्याख्या

ÆE     # get a list of prime exponents (noooo long builtin name)
  t0   # remove zeroes on both sides (leading or trailing)
    E  # all remaining elements are equal

œl-> t। ÆE के आउटपुट में मौजूद शून्य को पीछे करने का कोई कारण नहीं है।
द एग्री द आउटग्राफर


@dylnan 2250 के लिए विफल रहता है ।
डेनिस

@ डेनिस धन्यवाद, मुझे एहसास हुआ कि यह काम नहीं करेगा, लेकिन मुझे उम्मीद है कि यह चार बाइट समाधान के लिए प्रेरित करेगा
dylnan

6

जावास्क्रिप्ट (ईएस 6), 87 बाइट्स

रिटर्न 0 truthy या falsy के लिए एक गैर शून्य पूर्णांक के लिए।

f=(n,k=2,j,i)=>n%k?j*(P=d=>k%--d?P(d):d==!i)(k)|j-i|(n>1&&f(n,k+1,j||i)):f(n/k,k,j,-~i)

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

टिप्पणी की गई

f = (                     // f() = recursive function taking:
  n,                      //   n = input
  k = 2,                  //   k = current factor
  j,                      //   j = reference exponent, initially undefined
  i                       //   i = current exponent, undefined each time we start testing
) =>                      //       the next factor
  n % k ?                 // if k is not a divisor of n:
    j * (                 //   ignore the primality of k if j is still undefined
      P = d =>            //     P() = function testing if k is prime:
        k % --d ?         //       decrement d; if d is not a divisor of k:
          P(d)            //         do a recursive call until it is
        :                 //       else:
          d == !i         //         unless i is already defined: d must not be equal to 1
                          //         (if it is: k is the next prime but does not divide n)
    )(k) |                //   initial call to P() with d = k
    j - i | (             //   if both i and j are defined, they must be equal
      n > 1 &&            //   if n is not yet equal to 1,
      f(n, k + 1, j || i) //   go on with k + 1; if j is undefined, set it to i
    )                     //   (otherwise, stop recursion and return what we have)
  :                       // else:
    f(n / k, k, j, -~i)   //   increment the current exponent and go on with n / k

इस के परिवर्तन से टूट गया था j||iकरने के लिए i। अब यह बहुत सारी झूठी सकारात्मक चीजों का उत्पादन करता है।
18

@ डेडकोड ​​मैं इस पल के लिए जाँच या सुधार नहीं कर सकता, इसलिए मैंने अभी के लिए रोलबैक किया है।
अर्नुलद

5

सीजेएम , 30 29 बाइट्स

{mFz~)-!\__W=,\0=>\-:mp1#W=&}

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

लगभग 2 (!) - वर्ष के विराम के बाद मेरा पहला उत्तर है, इसलिए यह शायद अधिक गोल्फ हो सकता है। यह एक ब्लॉक है जो एक पूर्णांक के रूप में इनपुट लेता है (पूर्णांक के सरणियों के लिए भी मैप किया जा सकता है)।

व्याख्या

{        e# Begin block
 mF      e# Factor input, giving an array of primes and their powers
 z~      e# Transpose and dump, giving an array of primes and an array of powers
 )-      e# Check that the powers are the same: subtract each power from the last element
 !       e# Negate to make sure they're all 0
 \__W=,  e# Get the range from 0 to the largest prime minus one
 \0=>    e# Slice that array so it only includes everything larger than the smallest prime
 \-      e# Remove the original primes from the range array
 :mp     e# Check each element for primality. If the input's primes are consecutive,
         e# this will contain no primes
 1#W=    e# Make sure a "1" is not found
 &       e# If the powers are the same AND primes are consecutive, return 1. Otherwise, 0.
}

5

स्टैक्स , 5 6 बाइट्स

╣♥qJ╬c

इसे चलाएं और डीबग करें

अनपैक्ड, अनगुल्फेड और टिप्पणी की गई, यह इस तरह दिखता है।

|n    get the exponents of the prime factorization
0:D   trim leading zeroes
:u    array has exactly a single distinct element

संपादित करें: यह काम नहीं करता है 512। मैं इसे कुछ सोचा और उम्मीद है कि बाद में एक तय कर दूँगा। यह अब काम करता है।


3

स्टैक्स , 9 बाइट्स

१ सत्य है, ० मिथ्या है

αAG<└\{┬⌠

इसे चलाएं और डीबग करें

व्याख्या

|nX0-u%x:^=      # Full Program, unpacked, implicit input
|n               # Exponents of sequential primes in factorization. (eg. 20 -> [2 0 1])
  X              # Save to X register
   0-            # Remove all '0' from array
     u%          # Get unique numbers and get length of array
       x         # Copy back the array saved to X
        :^       # Is it ascending
         =       # Are the two comparisons equal? implicit output

शायद अधिक गोल्फ हो सकता है, लेकिन यह उन मामलों को कवर करता है जो मैं पिछले समाधान में गायब था।


3

MATL , 12 11 10 बाइट्स

YFtgYsg)Zs

MATL ऑनलाइन पर यह कोशिश करो!

लुइस मेंडू को हटाने-अग्रणी-शून्य भाग के लिए धन्यवाद। उन्होंने यह भी कहा कि सत्य मानों की अदला-बदली की अनुमति है, इसलिए यह उन नंबरों के लिए 0 रिटर्न देता है जो चुनौती की आवश्यकताओं और किसी भी सकारात्मक मूल्य को अन्यथा संतुष्ट करते हैं।

ग्रोसो मोडो, यह अनुक्रमिक प्रधान कारक के घातांक को उत्पन्न करता है, अग्रणी शून्य को हटाता है और मानक विचलन की गणना करता है।


मुझे लगता है कि 0iYFhdz7 बाइट्स के लिए काम करता है: अनुक्रमिक कारक के घातांक, निरंतर अंतर, गैर-शून्य की संख्या के लिए 0 को प्रीपेन्ड करें। परिणाम 1iff इनपुट आवश्यकता को संतुष्ट करता है
लुइस मेंडो

देरी से प्रतिक्रिया के लिए @LuisMendo क्षमा करें, लेकिन आप एक अलग उत्तर के रूप में पोस्ट कर सकते हैं। यह निश्चित रूप से बहुत अलग है।
श्री एक्सकोडर

ठीक है, मैंने इसे एक जवाब के रूप में पोस्ट किया
लुइस मेंडू

3

जावा 10, 223 191 178 176 168 बाइट्स

n->{var s=new java.util.HashSet();for(int f=1,i=1,x,j;n>1;){for(x=++i,j=2;j<x;)x=x%j++<1?1:x;if(x>1){for(j=0;n%i<1&&n>(f=0);n/=i)j++;if(f<1)s.add(j);}}return s.size();}

रिटर्न 1truthy के रूप में, और >=2falsey के रूप में।

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

स्पष्टीकरण:

n->{                   // Method with integer parameter and boolean return-type
  var s=new java.util.HashSet();
                       //  Set to keep track of the prime exponents
  for(int f=1,         //  Prime-flag, starting at 1
          i=1,x,j;     //  Index and temp integers
          n>1;){       //  Loop as long as `n` is still larger than 1
    for(x=++i,         //   Set `x` to `i`, after we've increased `i` by 1 first with `++i`
        j=2;           //   Set `j` to 2 (first prime)
        j<x;)          //   Inner loop as long as `j` is still smaller than `x`
      x=x%j++<1?       //    If `x` is divisible by `j`:
         1             //     Set `x` to 1
        :              //    Else:
         x;            //     Leave `x` unchanged
    if(x>1){           //    If `x` is larger than 1 (if `i` is a prime):
      for(j=0;         //     Use `j` as counter, and set it to 0
          n%i<1        //     If `n` is divisible by `i`:
                       //      And loop as long as `n` is still divisible by `i`,
          &&n>         //      and `n` is larger than 0
              (f=0);   //      (and set `f` to 0 at the same time)
          n/=i)        //       Divide `n` by `i`
        j++;           //       And increase `j` by 1
      if(f<1)          //     If the flag `f` is now/still 0:
        s.add(j);}}    //      Add counter `j` to the Set
  return s.size();}    //  Return the amount of items in the Set
                       //  (1 being true, >=2 being false)

कुछ उदाहरण इनपुट:

n=15:

  • झंडा रहता है 1 पहले प्रधान 2 के लिए (क्योंकि 15 2 से विभाज्य नहीं है)।
  • फ्लैग से चला जाता है 1के लिए 0जैसे ही हम प्रधानमंत्री 3. 15 के बाद से कर रहे के रूप में 3 से विभाज्य है, n5 (15/3 हो जाता है 1 ), और सेट हो जाता है[] → [1]
  • फिर हम अगले प्रधानमंत्री की जांच करते हैं 5. चूंकि 5 5 से विभाज्य है, n1 (5/5 1 ) बन जाता है , और सेट समान रहता है ()[1] → [1] )।
  • अब n=1, इसलिए हम बाहरी लूप को रोकते हैं। सेट ( [1]) में केवल एक आइटम शामिल है, 1दोनों आसन्न 3 और 5 से, इसलिए हम सच लौटते हैं।

n=14:

  • फ्लैग से चला जाता है 1के लिए 0के लिए पहले प्रधानमंत्री 2 (क्योंकि 14 2 से विभाज्य है)। n7 (14/2 1 ) बन जाता है, और सेट बन जाता है[] → [1]
  • फिर हम अगले प्राइम की जांच करते हैं 3. चूंकि 7 3 से विभाज्य नहीं nहै, वही रहता है और सेट बन जाता है[1] → [1,0]
  • फिर हम अगले प्राइम की जाँच करते हैं 5. चूंकि 7 भी 5 से विभाज्य नहीं nहै, वही रहता है, और सेट समान रहता है ( [1,0] → [1,0])।
  • फिर हम अगले प्राइम की जाँच करते हैं 7. चूंकि 7 7 से विभाज्य है, n1 (7/7 1 ) बन जाता है , और सेट समान रहता है ( [1,0] → [1,0])।
  • अब n=1, इसलिए हम बाहरी लूप को रोकते हैं। सेट ( [1,0]) में दो आइटम शामिल हैं, 1गैर-आसन्न primes 2 और 7 से, और 0primes 3 और 5 से, इसलिए हम झूठे वापस आते हैं।

n=72:

  • फ्लैग से चला जाता है 1के लिए 0, प्रथम प्रधानमंत्री 2 के लिए क्योंकि 72 2 (कई बार) से विभाज्य है। तो n9 (72/2 3 ) हो जाता है, और सेट बन जाता है[] → [3]
  • फिर हम अगले प्राइम की जांच करते हैं 3. चूंकि 9 3 (कई बार) से विभाज्य है, n1 (9/3 2 ) बन जाता है, और सेट बन जाता है [3] → [3,2]
  • अब n=1, इसलिए हम बाहरी लूप को रोकते हैं। सेट ( [3,2]) में दो आइटम हैं, 3प्राइम 2 से, और 2प्राइम 3 से, इसलिए हम झूठे हैं।

1
आप <2एक इंट को हटा सकते हैं और वापस कर सकते हैं (निर्दिष्ट करें कि आप सत्य के लिए 1 लौटाते हैं)।
बंजर

@wastl आह, नियम के दो मूल्यों में से केवल एक के बारे में याद किया। उस मामले में सच्चाई है 1और 2उच्चतर गलत है। धन्यवाद।
केविन क्रूज़सेन

शुक्रिया जिसने मुझे इनाम दिया है, लेकिन क्यों?
केविन क्रूज़सेन

1
मैंने अपने ECMAScript उत्तर पर अधिक ध्यान देने के लिए एक "रिवार्ड मौजूदा जवाब" इनाम शुरू किया था, जो कि मुझे अभी भी विश्वास है कि यह प्राप्त होने की तुलना में अधिक योग्य है (मैं इनाम को असफल मानूंगा)। जब हफ्ता खत्म हो गया, तो मुझे इनाम देने के लिए अपने स्वयं के अलावा कोई अन्य उत्तर चुनना पड़ा, या इसे सर्वोच्च मत वाले को डिफ़ॉल्ट करने के लिए छोड़ दिया। मुझे नहीं लगा कि कोई इसके लायक है, लेकिन आपके जवाब में सबसे अच्छा स्पष्टीकरण था, और इसीलिए मैंने इसे आपको सम्मानित किया; पीपीसीजी पर अच्छी व्याख्याएं बहुत दुर्लभ हैं। मेरे जवाब के लिए, मुझे लगता है कि मुझे इसे एक बेहतर राइटअप देना होगा, जिसकी योजना मेरे पास समय होने पर है।
डेडकोड

1
@ डेडकोड ​​आह, तो इसीलिए। मुझे लगा कि शायद किसी ने इनाम शुरू किया है, लेकिन उन्होंने गलती से इसे समाप्त कर दिया और यह मेरे बजाय आया। फिर भी थोड़ा उलझन में है कि मेरा जवाब क्यों नहीं और सबसे ज्यादा वोट दिया गया। मुझे कहना चाहिए कि मैं आपके सभी रेगेक्स उत्तरों से प्रभावित हूं। मैंने उनमें से कुछ को देखा है, और हर बार मैं हैरान हूं। खासकर जब मैं बाद में उसी जवाब पर वापस आता हूं और आपने इसे और अधिक लोड किया है। : DI बस मैंने देखा नहीं था और न ही इस चुनौती के लिए उत्थान किया था, इसलिए मैंने बस किया। तुम्हें पता है, मैं तुम्हारे इस जवाब के लिए एक इनाम जोड़ देंगे । :)
केविन क्रूज़सेन

2

जे , 16 बाइट्स

-8 बाइट्स के लिए FrownyFrog के लिए बड़ा धन्यवाद!

(=&#+/\=@#])_&q:

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

मेरा पुराना हल:

जे , 24 बाइट्स

[:(1=[:#@~.{.@I.}.])_&q:

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

स्पष्टीकरण:

_&q: प्रमुख प्रतिपादक

{.@I.}.] पहले शून्य-शून्य तत्व को खोजकर प्रमुख शून्य को हटाता है:

     }.   drop
       ]  from the list of exponents
{.@       as much items as the first of the 
   I.     indices of non-zero elements

1=[:#@~. यदि शेष सभी संख्याएँ बराबर हैं तो परीक्षण:

  [:#@~.  finds the length of the list after removing the duplicates
1=        is it 1?


2

MATL , 7 बाइट्स

0iYFhdz

परिणाम 1iff इनपुट आवश्यकता को पूरा करता है।

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

0    % Push 0
i    % Push input number
YF   % Exponents of consecutive prime factors
h    % Concatenate horizontally
d    % Consecutive differences
z    % Number of nonzeros. Implicitly display

2

ऑक्टेव , 67 बाइट्स

@(x)~any(diff(find(h=histc(factor(x),primes(x))))-1)&h(h>0)==max(h)

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

मेरा मानना ​​है कि यह एकमात्र समाधान है जो हिस्टोग्राम का उपयोग करता है।

स्पष्टीकरण:

यह एक हिस्टोग्राम बनाता है, जहां गिने जाने वाले चर इनपुट के कारक हैं, और डिब्बे में रखे जाते हैं primes(x) , जो कि इनपुट की तुलना में सभी गुना कम है। फिर हम प्रमुख कारकों का स्थान ढूंढते हैं, प्रत्येक सूचकांक के बीच अंतर लेते हैं और एक को घटाते हैं। यदि ऐसे कोई तत्व हैं जो शून्य नहीं हैं (अर्थात अभाज्य संख्याओं के सूचकांकों का अंतर 1 नहीं है), तो इसका परिणाम गलत होगा, अन्यथा यह एक सत्य मान लौटाएगा।

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

यदि वे दोनों ब्लॉक सत्य हैं तो हमारा इनपुट लगातार प्राइम कंटीन्यू एक्सपोनेंट नंबर है!


1

APL (Dyalog Extended) , 28 बाइट्स

{f p`↓⍭⍵⋄(1=≢∪p)∧∨/f⍷⍸1⍭⍳⍵}

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

किस तरह:

{f p`↓⍭⍵⋄(1=≢∪p)∧∨/f⍷⍸1⍭⍳⍵} ⍝ Monadic function, takes an argument ⍵
       ⍭⍵                     ⍝ Prime factors and exponents of ⍵
     `                         split the resulting matrix in 2 vectors
 f p                           assign the factors to f and the powers to p
                               then
                          ⍳⍵    range [1..⍵]
                        1      primality check for each element in the vector
                                where; returns the indices of truthy values
                     f          find the factors; returns a boolean vector
                   ∨/            logical OR reduction
                                logical AND
           (   p)               unique members of the powers
                                tally; returns the number of elements in the vector
            1=                   check if there's only one element




0

क्लीन , 127 बाइट्स

import StdEnv
@n=[]== $n
?n#j= $n
= @n||j==filter@[hd j..last j]&&any(\p=(prod j)^p==n)[1..n]
$n=[i\\i<-[2..n-1]|n/i*i==n&& @i]

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

समारोह को परिभाषित करता है ? :: Int -> Boolका उपयोग कर $ :: Int -> [Int]गुणनखंड के लिए और @ :: Int -> Boolprimality जाँच करने के लिए।


0

एपीएल (एनएआरएस) 41 चार्ट, 82 बाइट्स

{(1=≢∪+/¨{v=⍵⊃v}¨⍳≢v)∧(1↓w)≡¯1↓1πw←∪v←π⍵}

{{} मुख्य कारकों की सूची में तर्क of का कार्य कारक है (दोहराएं यदि एक प्राइम अधिक समय दिखाई देता है);
{{} अगला प्राइम है (ध्यान दें कि इस मामले में इसका तर्क कोई अदिश नहीं है बल्कि पूर्णांक का एक सरणी है)। परीक्षा:

  h←{(1=≢∪+/¨{v=⍵⊃v}¨⍳≢v)∧(1↓w)≡¯1↓1πw←∪v←π⍵}
  (2..30)/⍨h¨2..30
2 3 4 5 6 7 8 9 11 13 15 16 17 19 23 25 27 29 30 
  h¨27000 456533 72 10000000
1 1 0 0 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.