N'ye toplamda kaç kare, küp, dördüncü güç vb. Gerekiyor?


14

Size negatif olmayan nbir tam sayı ve bir tam sayı verilir p >= 2. Birlikte almak için bazı pgüçler ( p=2kareler, p=3küpler anlamına gelir) eklemeniz gerekir n. Bu her zaman negatif olmayan herhangi bir şey içindir n, ancak ihtiyacınız olan birçok pozitifp gücü (herhangi bir pozitif tamsayı) bilmiyorsunuz.

Bu sizin göreviniz: ptoplayabileceğiniz minimum güç sayısını bulun n.

Örnekler

>>> 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

Bu sorunla ilgili bir Wikipedia makalesi, Waring'in sorunu .

kurallar

  • Kodunuz gerekir bir program veya bir fonksiyonu olacaktır.

  • Girdi iki tamsayıdır nve pherhangi bir sıradadır. Tüm girişlerin geçerli olduğunu varsayabilirsiniz ( nherhangi bir pozitif tamsayıdır,p >= 2

  • Çıktı, toplanması gereken güç sayısını temsil eden bir tamsayıdır n.

  • Bu kod golf, bu yüzden en kısa program kazanır., Mutlaka en verimli değil.

  • Tüm yerleşik yapılara izin verilir.

Her zaman olduğu gibi, sorun net değilse, lütfen bana bildirin. İyi şanslar ve iyi golf!


Kaba kuvvet kazanacak gibi görünüyor. Umarım olmasın.
lirtosiast

3
Bu sorun inanılmaz derecede zor ve doğru sonuçları verirken herhangi bir cevabın ya biteceğinden şüpheliyim.
orlp

En azından üst sınırlar var
qwr

Yanıtlar:


5

Pyth, 20 19 bayt

Kaydedilen 1 bayt FryAmTheEggman sayesinde.

L&bhSmhy-b^dQS@bQyE

pÖnce ve sonra iki satırdan girdi alır n.

Çevrimiçi deneyin. Test odası.

açıklama

Kod y(b), sonucu döndüren özyinelemeli bir işlev tanımlar 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

Mathematica 61 50 bayt

LegionMammal978 tarafından kaydedilen 11 bayt ile.

Sayı sayma gücü ile kısıtlandığında, bu problem basittir (Mathematica'da). Tamsayıların güçlerini içerecek şekilde genişletildiğinde, bu bir kabus.

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

Test Durumları

(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]2. güce yükseltilen pozitif tamsayıların ntoplamı olarak ifade edilebilecek tüm durumları bulur .kp


Örneğin,

PowersRepresentations[1729, 2, 3]

{{1, 12}, {9, 10}}

Kontrol etme,

1^3 + 12^3

1729


9^3 + 10^3

1729


Mathematica gibi rekabetçi diller bu şeylerin amacını yener ... bir işlev adı bilmek yaratıcılık gerektirmez. Ama yine de, iyi yazılmış.
csga5000

1
@ csga5000 Hey, golf dilleri bu sitedeki zorlukların% 99'unu kazanıyor ...
LegionMammal978

@ LegionMammal978 Ben csga'nın görüşüne katılmama rağmen, golf dillerinde golf oynamak çok fazla yaratıcılık gerektiriyor .
Kapı tokmağı

2
Anlaşıldı, bu sunumda yaratıcılık için ödül yok. Kompaktlık için de değil: Pyth gönderimi uzunluğun yarısından az. Mathematica gibi diller için problemler, daha genel fenomenlerin örnekleri olarak yeniden oluşturulabildiklerinde ve yüksek seviyeli işlevlerin olağandışı kombinasyonlarının rol oynayabildiği durumlarda zorlaşır. Ayrıca daha ilginç hale geliyorlar.
DavidC

3

Java - 183177 bayt

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 bayt

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;
}

Sonuç

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

Bu cevap geçersiz. p(32,2)döndürmesi 5gerektiğinde döner 2( 4^2 + 4^2 = 32).
PurkkaKoodari

@ Pietu1998 Tamam, değiştireceğim.
Yassin Hajaj

@ Pietu1998 Nasıl yapardın?
Yassin Hajaj

Her sayı için mümkün olan her gücü kontrol ederek tekrar tekrar yaptım.
PurkkaKoodari

1
Java için @YassinHajaj +1 ve kendiniz yapıyor
csga5000

1

Python 2, 66 bayt

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

Yinelemeli olarak p, geri kalan kısmı negatif olmayan her bir gücü çıkarmaya , her kalan değerdeki değerini hesaplamaya ve minimum artı 1'i almaya çalışır. 0'da 0 çıkışı verir.

Çirkin kontrol if n/k**p(buna eşdeğer if k**p<=n), işlevin negatiflere girmesini ve minboş listeyi almaya çalışmasını durdurmaktır . Python varsa min([])=infinity, buna gerek kalmayacaktı.


Vay. Bu Python'daki test kodumdan çok daha kısa. 1!
Sherlock9

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.