कितने वर्ग, क्यूब्स, चौथी शक्तियां, आदि मुझे n में योग करने की आवश्यकता है?


14

आपको एक गैर-पूर्णांक nऔर एक पूर्णांक दिया जाता है p >= 2। आपको प्राप्त करने के लिए कुछ p-th शक्तियाँ ( p=2मतलब वर्ग, p=3मतलब क्यूब्स) को एक साथ जोड़ने की आवश्यकता है n। यह हमेशा किसी भी nonnegative के लिए होता है n, लेकिन आपको बहुत p-सी शक्तियां (किसी भी सकारात्मक पूर्णांक) की आवश्यकता नहीं होगी।

यह आपका कार्य है: उन न्यूनतम pशक्तियों को खोजें जो योग कर सकती हैं n

उदाहरण

>>> min_powers(7, 2)
4                       # you need at least four squares to add to 7
                        # Example: (2)^2 + (1)^2 + (1)^2 + (1)^2 = 4 + 1 + 1 + 1 = 7
>>> min_powers(4, 2)
1                       # you need at least one square to add to 4
                        # Example: (2)^2 = 4
>>> min_powers(7, 3)
7                       # you need at least seven cubes to add to 7
                        # Example: 7*(1)^3 = 7
>>> min_powers(23, 3)
9                       # you need at least nine cubes to add to 23
                        # Example: 2*(2)^3 + 7*(1)^2 = 2*8 + 7*1 = 23

इस समस्या पर एक विकिपीडिया लेख, वारिंग की समस्या

नियम

  • आपका कोड एक प्रोग्राम या एक फ़ंक्शन होना चाहिए।

  • इनपुट दो पूर्णांक nऔर pकिसी भी क्रम में है। आप मान सकते हैं कि सभी इनपुट वैध हैं ( nकोई सकारात्मक पूर्णांक है,p >= 2

  • आउटपुट एक पूर्णांक है जो योग करने के लिए आवश्यक शक्तियों की संख्या का प्रतिनिधित्व करता है n

  • यह कोड गोल्फ है, इसलिए सबसे छोटा कार्यक्रम जीतता है। जरूरी नहीं कि यह सबसे कुशल हो।

  • किसी भी और सभी बिल्ट-इन की अनुमति है।

हमेशा की तरह, अगर समस्या स्पष्ट नहीं है, तो कृपया मुझे बताएं। गुड लक और गुड गोल्फिंग!


खैर, ऐसा लग रहा है कि ब्रूट बल जीत जाएगा। मुझे आशा है कि हालांकि नहीं।
lirtosiast

3
यह समस्या अविश्वसनीय रूप से कठिन है, और मुझे संदेह है कि कोई भी उत्तर सही परिणाम देते समय कभी भी समाप्त हो जाएगा।
orlp

कम से कम ऊपरी सीमाएं हैं
क्यूर

जवाबों:


5

पायथ, 20 19 बाइट्स

सहेजे गए 1 बाइट को FryAmTheEggman का धन्यवाद।

L&bhSmhy-b^dQS@bQyE

दो लाइनों पर इनपुट लेता है, pपहले और फिर n

इसे ऑनलाइन आज़माएं। परीक्षण सूट।

व्याख्या

कोड एक पुनरावर्ती फ़ंक्शन को परिभाषित करता है y(b)जो के लिए परिणाम लौटाता है min_powers(b, p)

L                      define a function y(b):
 &b                      return b if it's 0
             S           get a list of positive integers less than or equal to
              @bQ        the p:th root of b
     m                   map the integers to:
        -b                 subtract from b
          ^dQ              the p:th power of the current integer
       y                   recurse on the above
      h                    increment the result
    hS                   find the smallest result number and return it
                 yE    calculate y(n) and print

8

गणितज्ञ 61 50 बाइट्स

LegionMammal978 द्वारा सहेजे गए 11 बाइट्स के साथ।

जब गिनती संख्या की शक्तियों के लिए प्रतिबंधित है, तो यह समस्या सीधी (गणितज्ञ में) है। जब पूर्णांकों की शक्तियां शामिल करने के लिए विस्तारित किया जाता है, तो यह एक बुरा सपना होता है।

(k=0;While[PowersRepresentations[#,++k,#2]=={}];k)&

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

(k = 0; While[PowersRepresentations[#, ++k, #2] == {}]; k) &[7, 2]
(k = 0; While[PowersRepresentations[#, ++k, #2] == {}]; k) &[4, 2]
(k = 0; While[PowersRepresentations[#, ++k, #2] == {}]; k) &[7, 3]
(k = 0; While[PowersRepresentations[#, ++k, #2] == {}]; k) &[23, 3]

4

1

7

9


PowersRepresentationsp[n,k,p]उन सभी मामलों का पता लगाता है जिन्हें -th पावर में उठाए गए सकारात्मक पूर्णांक के nयोग के रूप में व्यक्त किया जा सकता है ।kp


उदाहरण के लिए,

PowersRepresentations[1729, 2, 3]

{{१, १२}, {९, १०}}

जाँच हो रही है,

1^3 + 12^3

1729


9^3 + 10^3

1729


Mathematica जैसी प्रतिस्पर्धात्मक भाषा इन चीजों के उद्देश्य को हरा देती है ... यह किसी फ़ंक्शन नाम को जानने के लिए कोई रचनात्मकता नहीं लेती है। लेकिन फिर भी, अच्छी तरह से लिखा है।
csga5000

1
@ csga5000 हे, गोल्फिंग इस साइट पर 99% चुनौतियां
जीतती हैं

@ LegionMammal978, जबकि मैं सीएसगा ​​की बात से सहमत नहीं हूं, गोल्फिंग भाषाओं में चीजों को नीचे रखना, बड़ी मात्रा में रचनात्मकता की आवश्यकता है ।
दरवाज़े

2
सहमत, इस सबमिशन पर रचनात्मकता के लिए कोई पुरस्कार नहीं। न ही कॉम्पैक्टनेस के लिए: पायथ सबमिशन की लंबाई आधी से कम है। मैथमेटिका जैसी भाषाओं के लिए समस्याएँ तब चुनौती बन जाती हैं जब उन्हें अधिक सामान्य घटनाओं के उदाहरणों के रूप में पुनर्गठित किया जा सकता है और जब उच्च-स्तरीय कार्यों के असामान्य संयोजन एक भूमिका निभा सकते हैं। वे और भी दिलचस्प हो जाते हैं।
13

3

जावा - 183 177 बाइट्स

int p(int a,int b){int P,c,t,l=P=t=a,f=0;double p;while(P>0){a=t=l;c=0;while(t>0){if(a-(p=Math.pow(t,b))>=0&&t<=P){while((a-=p)>=0)c++;a+=p;}t--;}f=c<f||f==0?c:f;P--;}return f;}

183 बाइट्स

int p(int a,int b){int P,c,t,l,f=0;P=t=l=a;double p;while(P>0){a=t=l;c=0;while(t>0){if(a-(p=Math.pow(t,b))>=0&&t<=P){while((a-=p)>=0){c++;}a+=p;}t--;}f=c<f||f==0?c:f;P--;}return f;}

Ungolfed

int p(int a, int b){
    int P,c,t,l=P=t=a,f=0;
    double p;
    while (P>0){
        a=t=l;
        c=0;
        while (t>0){
            if (a-(p=Math.pow(t, b))>=0 && t<=P){
                while((a-=p)>=0)c++;
                a+=p;
            }
            t--;
        }
        f=c<f||f==0?c:f;
        P--;
    }
    return f;
}

परिणाम

System.out.println(p(7, 2));    // 4
System.out.println(p(4,2));     // 1
System.out.println(p(7,3));     // 7
System.out.println(p(23,3));    // 9

यह उत्तर अमान्य है। p(32,2)रिटर्न 5जब यह वापस आ जाएगी 2( 4^2 + 4^2 = 32)।
पुरकाकूदरी

@ Pietu1998 ठीक है मैं इसे संशोधित करूंगा।
यिसन हजाज

@ Pietu1998 आप इसे कैसे करेंगे?
यिसन हजाज

मैंने इसे पुनरावर्ती रूप से किया, प्रत्येक संख्या के लिए प्रत्येक संभव शक्ति की जांच की।
पुरकाकूदरी

1
जावा के लिए @YassinHajaj +1 और इसे स्वयं करना
csga5000

1

पायथन 2, 66 बाइट्स

f=lambda n,p:n and-~min(f(n-k**p,p)for k in range(1,n+1)if n/k**p)

प्रत्येक p-पॉवर को पुन: प्राप्त करने की कोशिश करता है, जो शेष नॉन-नेगेटिव को छोड़ देता है, प्रत्येक शेष पर उसका मान गणना करता है, और न्यूनतम प्लस 1 ले रहा है। 0 पर, आउटपुट 0।

बदसूरत जाँच if n/k**p(समतुल्य if k**p<=n) फ़ंक्शन को नकारात्मक में जाने से रोकना है और minखाली सूची को लेने की कोशिश करना है । यदि पायथन है min([])=infinity, तो इसकी आवश्यकता नहीं होगी।


वाह। यह पायथन पर मेरे परीक्षण कोड से बहुत छोटा है। +1!
शर्लक

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