एक कारक खेल


13

इनपुट

एक एकल पूर्णांक 1x1015

उत्पादन

अलग धनात्मक पूर्णांक है कि उत्पाद की अधिकतम संख्या x

उदाहरण

इनपुट: 1099511627776. आउटपुट: 9. कारकों की एक संभावित इष्टतम सूची है: (1, 2, 4, 8, 16, 32, 64, 128, 4096)।

इनपुट: 127381. आउटपुट 4. कारकों की एक संभावित इष्टतम सूची है: (1, 17, 59, 127)।

इस पुराने सवाल से संबंधित है ।


9
क्या आप कुछ और परीक्षण मामलों को जोड़ सकते हैं? (उचित आकार के अनुसार।)
अरनौल्ड

8
अधिकांश उत्तरों पर आपकी टिप्पणियों को देखते हुए: यदि आप इसके बजाय कुशल कोड की तलाश कर रहे हैं, तो इसे निश्चित रूप से टैग नहीं किया जाना चाहिए code-golf। आप fastest-codeया तो fastest-algorithmआने वाली चुनौती के लिए विचार कर सकते हैं । यदि आप वास्तव में निर्दिष्ट सीमा के भीतर सीमित समय में काम करने के लिए सभी उत्तर चाहते हैं, तो इसका स्पष्ट उल्लेख किया जाना चाहिए। (और मैंने एक छोटी रेंज की सिफारिश की होगी ताकि यह code-golfपूरी तरह से संघर्ष न करे ।)
अरनौल्ड

@Arnauld नहीं मैं इसे कोड-गोल्फ बनाने के लिए सावधान हूं और किसी को भी इसके लिए नहीं आंका जाता। यदि कोड निर्दिष्ट इनपुट श्रेणियों के लिए चल सकता है तो यह सिर्फ अच्छा होगा।
अनुष


1
क्योंकि x=1, 2, ...मुझे वह मिलता है f(x)=1, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 3, 3, 2, 4, 2, 3, 3, 3, 2, 4, 2, 3, 3, 3, 3, 4, 2, 3जो मुझे OEIS में नहीं मिलता । यह स्पष्ट है कि तथ्यात्मक संख्याओं के लिए रिकॉर्ड दिखाई देंगे x। उदाहरण के लिए सबसे छोटा xऐसा f(x)=13होगा 13!। मुझे लगता है कि fकेवल प्रमुख कारक के घातांक पर निर्भर करता है। इसलिए खोजने के लिए f(13^4*19^7*29^2)हम सरल हो सकते हैं f(2^7*3^4*5^2)
जेपी स्टिग नील्सन

जवाबों:


5

वुल्फ्राम भाषा (गणितज्ञ) , 52 बाइट्स

Max[Length/@Cases[Subsets@Divisors@#,{a__}/;1a==#]]&

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

4-बाइट्स ने @attinat को धन्यवाद दिया

यहां एक 153 बाइट्स संस्करण भी है जो गणना करता है 1099511627776और10^15

Max[Length/@Table[s=RandomSample@Flatten[Table@@@FactorInteger[#]];Last@Select[Times@@@TakeList[s,#]&/@IntegerPartitions@Length@s,DuplicateFreeQ],5!]]+1&      

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

के लिए परिणाम 10^15है 12

{{2, 4, 5, 10, 16, 25, 40, 50, 100, 125, 250}


1099511627776 साथ दुर्घटनाओं
अनुश

7
@ आशु यह दुर्घटना नहीं करता है। बस याद की जरूरत है। आपने स्मृति सीमाओं के बारे में कुछ नहीं कहा। यह कोड गोल्फ है
J42161217

हाँ मुझे एहसास है। यह अच्छा होगा यदि आप वास्तव में प्रश्न में निर्दिष्ट इनपुट रेंज कोड को चला सकते हैं।
अनुष

6
@ आंसू यह कोड-गोल्फ है। अच्छा जवाब नहीं। कृपया अपने मानदंड निर्दिष्ट करें। एक उत्तर या तो मान्य है या नहीं। मुझे लगता है कि यहाँ समस्या यह है कि सवाल ... शायद आपको इसे "सबसे पर्याप्त एल्गोरिथ्म" में बदलना चाहिए
J42161217

3
@ अस्नश मैंने अपने उत्तर में एक संपादन किया और एक और संस्करण जोड़ा जो वास्तव में बहुत तेज़ और कुशल है अगर आप इसे जांचना चाहते हैं
J42161217


3

05AB1E , 9 बाइट्स

बहुत अकुशल। बड़ी संख्या में विभाजकों के साथ संख्याओं के लिए TIO पर समय निकालेंगे।

ÑæʒPQ}€gZ

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

व्याख्या

Ñ          # push a list of divisors of the input
 æ         # push the powerset of that list
  ʒPQ}     # filter, keep only the lists whose product is the input
      €g   # get the length of each
        Z  # take the maximum

आपका TIO कोड 9. के बजाय 3 आउटपुट करता है
Anush

@ आंसू: यह आपके उदाहरण की तुलना में एक अलग संख्या है (क्योंकि कई कारकों के कारण एक बार बाहर)। मुझे शायद अधिक विशिष्ट उदाहरण का उपयोग करना चाहिए।
एमिग्ना

€gZएक éθgही bytecount की तुलना में थोड़ा अधिक कुशल है ।
ग्रिम्मी

@ जिमी: सच। यह ज्यादा अंतर नहीं करेगा क्योंकि यह फिल्टर है जो यहाँ बड़ा बुरा आदमी है, लेकिन यह थोड़ा और अधिक कुशल होने का नुकसान नहीं पहुँचाता है :)
Emigna

2

पर्ल 6 , 38 बाइट्स

{$!=$_;+grep {$!%%$_&&($!/=$_)},1..$_}

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

विभाजकों के चयन के लिए लालची दृष्टिकोण लेता है।


1099511627776 साथ समाप्त नहीं करता
अनुश

6
@ सुश्रुत खैर, यह अंततः समाप्त होता है । आम तौर पर, उत्तर मान्य है यदि प्रोग्राम का एल्गोरिथ्म किसी भी इनपुट के साथ काम करेगा, अगर उसे उतना मेमोरी और समय दिया जाए जितना वह चाहता था। चूंकि यह कोड-गोल्फ है , मैंने इसे कोड की लंबाई के लिए अनुकूलित किया, न कि एल्गोरिथमिक जटिलता
जो किंग

2

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

f=(n,i=0)=>n%++i?n>i&&f(n,i):1+f(n/i,i)

शायद कुछ बाइट्स हैं जिन्हें यहां और वहां बचाया जा सकता है। बस कारकों के लिए लालची एल्गोरिथ्म का उपयोग करता है।


2

जेली , 9 बाइट्स

ŒPP=³ƊƇẈṀ

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

-1 बाइट किसी का धन्यवाद

-2 बाइट्स ErikTheOutgolfer के लिए धन्यवाद


OEIS सुपरसीकेर के लिए एक इनपुट तैयार करते समय, मैंने एक 11-बाइट की संभावना वाली गोल्फ जेली प्रोग्राम बनाया (जो एक अलग दृष्टिकोण का उपयोग करता है), और एक जेली उत्तर पोस्ट करने की संभावना नहीं है, इसलिए मैं दिखावा करूँगा कि मैंने आपके समाधान से एक बाइट गलाई है ÆE×8‘½’:2S‘(यह A003056 के लिए OEIS "सूत्र" अनुभाग की शक्ति के साथ काम करता है)। अस्वीकरण: यह गलत हो सकता है, लेकिन यह परीक्षण मामलों पर काम करता है।
मेरा सर्वनाम

यह 1099511627776 साथ समाप्त करने के लिए प्रतीत नहीं होता है
अनुश

@someone 36 के लिए काम नहीं करता है, लेकिन धन्यवाद
HyperNeutrino

@ आंसू हाँ, यह वास्तव में धीमा है क्योंकि मैंने इसे कोड-गोल्फ किया है, दक्षता के लिए अनुकूलित नहीं है
हाइपरयूट्रीनो

1
ÆDx21


2

ब्रेकीलॉग , 8 बाइट्स

f;?⟨⊇×⟩l

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

(भोली दृष्टिकोण, {~×≠l}ᶠ⌉उन्हें खत्म करने से पहले अतिरिक्त 1s के साथ अनंत संख्या में समाधान उत्पन्न करता है , और इस तरह वास्तव में समाप्त करने में विफल रहता है। हालांकि, यह एक ही बाइट गिनती के लिए एक समस्या नहीं है, हालांकि!)

इनपुट चर और आउटपुट के माध्यम से इनपुट को आउटपुट चर के माध्यम से लेता है। TIO के हेडर में आपको यह दर्शाने के लिए अधिकांश कोड की एक कॉपी होती है कि कारक सूची क्या है, लेकिन यह इसके साथ पूरी तरह से ठीक काम करता है। चूंकि पहले बड़े सब्लिस्ट्स देते हैं, इसलिए यह अनिवार्य रूप से ज्यादातर अन्य उत्तरों के समान ही काम करता है, लेकिन स्पष्ट रूप से उत्पन्न करने और कारकों के पूर्ण अधिकार को फ़िल्टर करने के बिना, बैकग्राउंडिंग के लिए धन्यवाद।

            The output
       l    is the length of
    ⊇       a sublist (the largest satisfying these constraints)
f           of the factors of
            the input
 ; ⟨  ⟩     which
     ×      with its elements multiplied together
  ?         is the input.


1

गैया , १० ९ बाइट्स

Π=
dz↑⁇(l

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

अन्य जगहों पर देखे गए समान "एल्गोरिथ्म" का अनुसरण करता है - संख्या के बराबर उत्पाद के साथ सबसे लंबे समय के लिए भाजक अधिकार को फ़िल्टर करें और इसकी लंबाई वापस करें।

	| helper function
Π=	| is prod(list)==n (implicit)?
	|
	| main function; implicitly takes n
dz	| divisor powerset (in decreasing order of size)
  ↑⁇	| filter by helper function
    (l	| take the first element and take the length (implicitly output)

0

क्लैम , 15 बाइट्स

p}_`nq#:;qQ@s~Q

TIO लिंक जल्द ही आ रहा है (जब डेनिस खींचता है)

मूल रूप से @ Emigna के 05AB1E समाधान का एक बंदरगाह।

व्याख्या

                - Implicit Q = first input
p               - Print...
 }              - The last element of...
  _             - Sorted...
   `nq          - Lengths of... (map q => q.len)
           @s   - Items in powerset of
             ~Q - Proper divisors of Q
      #         - Where... (filter)
        ;q      - Product of subset
       :        - Equals...
          Q     - Q

0

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 54 बाइट्स

int f(int n,int i=0)=>n%++i<1?1+f(n/i,i):n>i?f(n,i):0;

@ Vrugtehagel और @ JoKing के उत्तर के समान दृष्टिकोण का उपयोग करता है।

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


यह मानते हुए कि मैंने आपके तर्क को सही ढंग से लागू किया, एक 53-बाइट समाधान (जो मैं "वापसी" कीवर्ड से छुटकारा नहीं पा सका): इसे ऑनलाइन आज़माएं!
मेरा सर्वनाम

1
@someone धन्यवाद, लेकिन मेटा के अनुसार, कार्यों को पुन: प्रयोज्य करना होगा । इसके अलावा, मुझे नहीं पता कि अगर समारोह के बाहर घोषणाएँ होना अनिवार्य है, तो पीछे चल रहे अर्धविराम को छोड़ दिया जाए, उस पर एक मेटा पोस्ट बना सकते हैं।
अज्ञानता का अवतार

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