एक से अधिक तरीकों में सही शक्तियां?


13

चुनौती

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

परिभाषा

एक सही शक्ति को एक संख्या के रूप में परिभाषित किया गया है जिसे मैंने m ^ k द्वारा पाया , जहां:

  • मी और मैं सकारात्मक पूर्णांक हैं
  • मी! = के

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

इनपुट -> आउटपुट
1000 -> 16, 64, 81, 256, 512, 625, 729
५६ -> १६
999 -> 16, 64, 81, 256, 512, 625, 729
81 -> 16, 64, 81
1500 -> 16, 64, 81, 256, 512, 625, 729, 1024, 1296

कृपया एक पठनीय, टिप्पणी वाला संस्करण भी प्रदान करें।


क्या आपके अंतिम वाक्य का मतलब है कि व्हाट्सएप चरित्र की गिनती में नहीं आता है?
sep2k

@ sepp2k हाँ! हमें सफेद स्थानों की गिनती नहीं करनी चाहिए।
fR0DDY

4
@ fR0DDY व्हाट्सएप भाषा के बारे में क्या ? व्हॉट्सएप के पात्रों को अनदेखा करना हमेशा इस भाषा को जीत दिलाएगा।
मोइनुद्दीन

4
मुझे नहीं लगता कि यह अजीब सवाल है जो एक व्हाट्सएप उत्तर द्वारा जीता जा सकता है। हम देखेंगे कि किसी को इसे करने के लिए परेशान होने से पहले कितना समय लगता है।
जिब्बलर

1
क्या N की कोई सीमा है?
डॉगबर्ट

जवाबों:


3

गणित: १०३ वर्ण

रिक्त स्थान निकाले जा सकते हैं

Select[Flatten@
       Table[
        Solve[Log@#/Log@b == k, k, Integers] /. k -> #, {b, 2, #}] & /@ Range@#, 
Length@# > 2 &][[All, 1, 1]] &  

उपयोग:

%[81]
{16, 64, 81}

3

जेली , 11 सार्थक बाइट्स, भाषा चुनौती देती है

ḊḟÆR *@þ Ḋ  F  fḊ

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

यहाँ एक पूरी तरह से अलग समाधान है। यह कुशल और अक्षम की एक जिज्ञासु हाइब्रिड है, जो एक कुशल कोर एल्गोरिथ्म का उपयोग बहुत ही अक्षम आवरण में करता है (इतना है कि यह बहुत बड़ी संख्या को संभाल नहीं सकता है)। पहले की तरह, सभी व्हाट्सएप अर्थहीन है।

यहां देखिए यह कैसे काम करता है। (जो कई बार दिखाई देता है) 2 से इनपुट समावेशी की संख्याओं की एक सूची है:

ḊḟÆR *@þ Ḋ  F  fḊ
ḊḟÆR                Ḋ, with all primes between 2 and the input removed
                    (i.e. all composite numbers from 4 to the input)
     *@þ Ḋ          Exponentiate all Ḋ elements with all ḊḟÆR elements
            F       Flatten the result (it had a nested structure)
               fḊ   Keep only elements in Ḋ

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

सीमा में अधिकतम शक्ति क्या है और किसी भी आगे पुनरावृत्ति न हो, इस पर काम करके, इसे आसानी से एक अत्यधिक कुशल उत्तर में संशोधित करना संभव होगा, लेकिन यह एक बहुत अधिक बाइट्स होगा, और यह कोड-गोल्फ है।


1

पर्ल: 68 वर्ण

में अधिकतम (१०००) हो जाता है $Nऔर में उत्तर देता है @a

for $x ( 2..$N ) {
    $c{$x**$_}++ for 2..log($N)/log$x
}
@a = grep { $c{$_} > 1 } keys %c

पूरे कार्यक्रम के लिए, मुझे एक और 18 वर्ण चाहिए:

$m = shift;
for $x ( 2..$m ) {
    $c{$x**$_}++ for 2..log($m)/log$x
}
print join ' ', grep { $c{$_} > 1 } keys %c

यह क्रम में मुद्रित नहीं होता है। codepad.org/H0Zyau3z
डॉगबर्ट

@ डोगबर्ट: ऑर्डर में प्रिंटिंग चुनौती का हिस्सा नहीं है। यदि यह था, तो आप sort पहले cculd जोड़ें grep। मैंने पहले कोडपैड को नहीं देखा था, वैसे। धन्यवाद।

0

रूबी - 101 वर्ण (बिना व्हाट्सएप)

f=->l{c=Hash.new{0}
2.upto(1E4){|i|2.upto(20){|j|c[i**j]+=1}}
c.map{|k,v|v>1&&k<=l&&k||p}.compact.sort}

1 <= limit <= 100,000,0005 सेकंड के भीतर काम करता है ।

परीक्षा

> f[10000]
[16, 64, 81, 256, 512, 625, 729, 1024, 1296, 2401, 4096, 6561, 10000]

0

जेली , 13 सार्थक पात्र, भाषा चुनौती देती है

R  µ  ọḊ *@Ḋ ċ >2  µ  Ðf

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

यहाँ सभी व्हाट्सएप नगण्य है। मैंने इसका उपयोग अपने उत्तर की संरचना को दिखाने के लिए किया था, जैसा कि सवाल पूछता है।

यहां देखिए यह कैसे काम करता है:

R  µ  ọḊ *@Ḋ ċ >2  µ  Ðf
R                     Ðf    Find all numbers n from 1 to the input, such that:
   µ               µ          (grouping marks, like {} in C)
       Ḋ   Ḋ                  Take the range from 2 to n
      ọ                       Find the number of times each divides n
         *@                   Raise the range from 2 to n to these powers
             ċ                Count the number of times n appears
               >2             and the result must be greater than 2

उदाहरण के लिए, जब n = 256 का परीक्षण करते हैं, तो हम प्रत्येक संख्या को 2 से 256 तक की संख्याओं को 256 में विभाजित करते हैं। केवल वही संख्याएं जो एक से अधिक बार विभाजित होती हैं 2 (जो 8 बार विभाजित होती हैं), 4 (जो 4 को विभाजित करती हैं समय), 8 (जो दो बार विभाजित होता है), और 16 (जो दो बार विभाजित होता है)। इसलिए जब हम वहां निर्धारित शक्तियों के विभाजन की संख्या बढ़ाते हैं, तो हम प्राप्त करते हैं:

2⁸, 3, 4⁴, 5, 6, 7, 8², 9, 10, 11, 12, 13, 14, 15, 16², 17, ..., 255, 256

यह मूल मूल्य, 256, जिस तरह से बराबर है कि 256 एक आदर्श शक्ति है, प्लस एक (अंतिम तत्व 256 पैदा करता है क्योंकि 256 = 256¹) के बराबर उत्पादन करता है। इसलिए यदि हम सरणी में दो बार से अधिक 256 देखते हैं (और हम इस मामले में करते हैं; 8 64 64 है लेकिन अन्य "दिलचस्प" तत्व सभी 256 का उत्पादन करते हैं), यह एक आदर्श शक्ति होनी चाहिए।

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