विभाजनकारी विभाजनकारी


17

एक सकारात्मक पूर्णांक को देखते हुए n आप हमेशा एक टपल पा सकते हैं (1,2,,) पूर्णांक मैं2 ऐसी है कि और यहाँ अर्थ है , a का एक गुणक , जो "a dives b" कहता है। यदि सभी प्रविष्टियाँ कम से कम होनी चाहिए । के लिए12=n

1|2 , 2|3 , ... , -1|
|n>1मैं2n=1 हमारे पास ऐसा कोई कारक नहीं है और इसलिए हमें एक खाली टपल मिलता है।

मामले में आप उत्सुक हैं कि यह कहाँ से आता है: इस अपघटन को संख्या सिद्धांत में अनौपचारिक कारक अपघटन के रूप में जाना जाता है और इसका उपयोग सूक्ष्म रूप से उत्पन्न एबेलियन समूहों के वर्गीकरण में किया जाता है

चुनौती

यह देखते हुए n उत्पादन सभी तरह के tuples (1,2,,) को देखते हुए के लिए n ठीक एक बार, जो कुछ भी तरह आप आदेश। मानक आउटपुट स्वरूप की अनुमति है।

उदाहरण

  1: () (empty tuple)
  2: (2)
  3: (3)
  4: (2,2), (4)
  5: (5)
  6: (6)
  7: (7)
  8: (2,2,2), (2,4), (8)
  9: (3,3), (9)
 10: (10)
 11: (11)
 12: (2,6), (12)
108: (2,54), (3,3,12), (3,6,6), (3,36), (6,18), (108)

संबंधित: http://oeis.org/A000688 , n के सभी गुणक विभाजन सूचीबद्ध करें


क्या हम प्रत्येक टपल को रिवर्स ऑर्डर में आउटपुट कर सकते हैं? (जैसे 12,3,3)
अरनौल्ड

1
@Arnauld हाँ, मुझे लगता है कि जब तक यह आरोही या अवरोही क्रम में क्रमबद्ध है तब तक यह ठीक होना चाहिए!
दोष

क्या हम इनपुट को पूर्णांक> = 2 तक सीमित कर सकते हैं? यदि यह मौजूदा उत्तरों में से कुछ को अमान्य नहीं करेगा?
निक केनेडी

1
नहीं, चश्मा स्पष्ट रूप से कहता है कि किसी भी सकारात्मक पूर्णांक को इनपुट के रूप में दिया जा सकता है जिसमें । अगर मैं इसे बदल देता हूं तो हर कोई जो वास्तव में ऐनक का पालन करता है, को अपना उत्तर बदलना होगा। n=1
दोष

जवाबों:



3

05AB1E , 13 बाइट्स

Òœ€.œP€`êʒüÖP

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

Ò                      # prime factorization of the input
 œ€.œ                  # all partitions
     P                 # product of each sublist
      €`               # flatten
        ê              # sorted uniquified
         ʒ             # filter by:
          üÖ           #  pairwise divisible-by (yields list of 0s or 1s)
            P          #  product (will be 1 iff the list is all 1s)

Òœ€.œPउपठेका पाने के लिए उपयोग करने का अच्छा तरीका । मैं वास्तव में कुछ कम के रूप में अच्छी तरह से खोजने में परेशानी थी .. अगर केवल एक Åœराशि के समान था, लेकिन राशि के बजाय उत्पाद के लिए। ;)
केविन क्रूज़सेन 14

N = 1 के लिए विफल (प्रश्न पर टिप्पणी देखें)
निक केनेडी


2

जावास्क्रिप्ट (V8) ,  73  70 बाइट्स

(,-1,,1)

f=(n,d=2,a=[])=>n>1?d>n||f(n,d+1,a,d%a[0]||f(n/d,d,[d,...a])):print(a)

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

टिप्पणी की गई

f = (             // f is a recursive function taking:
  n,              //   n   = input
  d = 2,          //   d   = current divisor
  a = []          //   a[] = list of divisors
) =>              //
  n > 1 ?         // if n is greater than 1:
    d > n ||      //   unless d is greater than n,
    f(            //   do a recursive call with:
      n,          //     -> n unchanged
      d + 1,      //     -> d + 1
      a,          //     -> a[] unchanged
      d % a[0] || //     unless the previous divisor does not divide the current one,
      f(          //     do another recursive call with:
        n / d,    //       -> n / d
        d,        //       -> d unchanged
        [d, ...a] //       -> d preprended to a[]
      )           //     end of inner recursive call
    )             //   end of outer recursive call
  :               // else:
    print(a)      //   this is a valid list of divisors: print it

1

05AB1E , 17 15 14 बाइट्स

ѦIиæʒPQ}êʒüÖP

बड़े परीक्षण मामलों के लिए बहुत धीमी गति से।

-1 बाइट @ ग्रीम को धन्यवाद ।

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

स्पष्टीकरण:

Ñ               # Get all divisors of the (implicit) input-integer
 ¦              # Remove the first value (the 1)
  Iи            # Repeat this list (flattened) the input amount of times
                #  i.e. with input 4 we now have [2,4,2,4,2,4,2,4]
    æ           # Take the powerset of this list
     ʒ  }       # Filter it by:
      PQ        #  Where the product is equal to the (implicit) input
         ê      # Then sort and uniquify the filtered lists
          ʒ     # And filter it further by:
           ü    #  Loop over each overlapping pair of values
            Ö   #   And check if the first value is divisible by the second value
             P  #  Check if this is truthy for all pairs

                # (after which the result is output implicitly)

n=8

1
13 और तेज । ऐसा लगता है कि यह अभी भी छोटा हो सकता है।
ग्रिमी

1

जावास्क्रिप्ट, 115 बाइट्स

f=(n,a=[],i=1)=>{for(;i++<n;)n%i||(a=a.concat(f(n/i).filter(e=>!(e[0]%i)).map(e=>[i].concat(e))));return n>1?a:[a]}

मैं बाद में एक स्पष्टीकरण लिखूंगा


1

वोल्फ्राम लैंग्वेज (मैथमेटिका) , 78 76 72 71 67 बाइट्स

If[#>(p=1##2),Join@@If[i∣##,##~#0~i,{}]~Table~{i,2,#/p},{{##2}}]&

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

पुनरावर्ती वृक्ष।


जानवर बल समाधान, 64 बाइट्स :

Union@Cases[Range@#~Tuples~#,{a__,__}/;1a==#&&a>=2&&1∣a:>{a}]&

N के सभी गुणात्मक विभाजन को सूचीबद्ध करने के लिए मेरे गणित समाधान का तुच्छ संशोधन ।

चूंकि यह जांच करने की जरूरत है nntuples, उसी तर्क का उपयोग करके अधिक कुशल संस्करण आज़माएं


0

जाप , 22 बाइट्स

â Åï c à f@¥XשXäv eÃâ

कोशिश करो

â Åï c à f@¥XשXäv eÃâ     :Implicit input of integer U
â                          :Divisors
  Å                        :Slice off the first element, removing the 1
   ï                       :Cartesian product
     c                     :Flatten
       à                   :Combinations
         f                 :Filter by
          @                :Passing each sub-array X through the following function
           ¥               :  Test U for equality with
            X×             :  X reduced by multiplication
              ©            :  Logical AND with
               Xä          :  Consecutive pairs of X
                 v         :  Reduced by divisibility
                   e       :  All truthy?
                    Ã      :End filter
                     â     :Deduplicate
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.