Có bao nhiêu hình vuông, hình khối, sức mạnh thứ tư, v.v. Tôi cần phải tổng hợp thành n?


14

Bạn được cung cấp một số nguyên không âm nvà một số nguyên p >= 2. Bạn cần thêm một số psức mạnh thứ ( p=2có nghĩa là hình vuông, p=3có nghĩa là hình khối) với nhau để có được n. Đây luôn là đối với bất kỳ không âm n, nhưng bạn không biết nhiều pquyền hạn -thứ (của bất kỳ dương tính số nguyên), bạn sẽ cần.

Đây là nhiệm vụ của bạn: tìm số lượng pquyền hạn tối thiểu có thể tổng hợp n.

Ví dụ

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

Một bài viết Wikipedia liên quan về vấn đề này, vấn đề của Waring .

Quy tắc

  • Mã của bạn phải là một chương trình hoặc một chức năng.

  • Đầu vào là hai số nguyên nptheo thứ tự bất kỳ. Bạn có thể giả sử tất cả các đầu vào là hợp lệ ( nlà bất kỳ số nguyên dương nào,p >= 2

  • Đầu ra là một số nguyên biểu thị số lượng quyền hạn cần thiết để tổng hợp n.

  • Đây là mã golf, vì vậy chương trình ngắn nhất sẽ thắng., Không nhất thiết là hiệu quả nhất.

  • Bất kỳ và tất cả các phần dựng sẵn đều được cho phép.

Như mọi khi, nếu vấn đề không rõ ràng, xin vui lòng cho tôi biết. Chúc may mắn và chơi golf tốt!


Chà, có vẻ như lực lượng vũ phu sẽ chiến thắng. Tôi hy vọng không mặc dù.
lirtosiast

3
Vấn đề này cực kỳ khó khăn và tôi nghi ngờ rằng bất kỳ câu trả lời nào cũng sẽ kết thúc trong khi đưa ra kết quả chính xác.
orlp

Ít nhất là có giới hạn trên
qwr

Câu trả lời:


5

Bình thường, 20 19 byte

Đã lưu 1 byte nhờ FryAmTheEggman.

L&bhSmhy-b^dQS@bQyE

Đưa đầu vào trên hai dòng, pđầu tiên và sau đó n.

Hãy thử trực tuyến. Bộ thử nghiệm.

Giải trình

Mã xác định một hàm đệ quy y(b)trả về kết quả cho 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

Toán học 61 50 byte

Với 11 byte được lưu bởi LegionMammal978.

Khi bị hạn chế quyền hạn đếm số, vấn đề này rất đơn giản (trong Mathicala). Khi được mở rộng để bao gồm sức mạnh của số nguyên, đó là một cơn ác mộng.

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

Các trường hợp thử nghiệm

(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]tìm thấy tất cả các trường hợp ncó thể được biểu thị dưới dạng tổng của các ksố nguyên dương được nâng lên thành plũy thừa.


Ví dụ,

PowersRepresentations[1729, 2, 3]

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

Đang kiểm tra

1^3 + 12^3

1729


9^3 + 10^3

1729


Các ngôn ngữ cạnh tranh như Mathicala đánh bại mục đích của những điều này ... không cần phải có bất kỳ sáng tạo nào để biết tên hàm. Nhưng vẫn còn, được viết tốt.
csga5000

1
@ csga5000 Này, ngôn ngữ chơi gôn chiến thắng 99% các thử thách trên trang web này ...
LegionMammal978

@ LegionMammal978 Mặc dù tôi không đồng ý với quan điểm của csga, nhưng việc chơi golf trong các ngôn ngữ chơi gôn đòi hỏi một sự sáng tạo rất lớn .
Doorknob

2
Đồng ý, không có giải thưởng cho sự sáng tạo trong trình này. Cũng không phải cho sự gọn nhẹ: đệ trình Pyth nhỏ hơn một nửa chiều dài. Các vấn đề trở nên thách thức đối với các ngôn ngữ như Mathematica khi chúng có thể được gọi lại là trường hợp của các hiện tượng tổng quát hơn và khi sự kết hợp bất thường của các hàm cấp cao có thể đóng vai trò. Họ cũng trở nên thú vị hơn.
DavidC

3

Java - 183 177 byte

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 byte

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

Ung dung

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

Kết quả

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

Câu trả lời này không hợp lệ. p(32,2)trả về 5khi cần trả về 2( 4^2 + 4^2 = 32).
PurkkaKoodari

@ Pietu1998 Ok tôi sẽ sửa đổi nó.
Yassin Hajaj

@ Pietu1998 Bạn sẽ làm thế nào?
Yassin Hajaj

Tôi đã làm nó một cách đệ quy, kiểm tra từng sức mạnh có thể cho mỗi số.
PurkkaKoodari

1
@YassinHajaj +1 cho java và tự làm điều đó
csga5000

1

Python 2, 66 byte

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

Đệ quy cố gắng trừ đi từng pnăng lượng thứ còn lại, phần còn lại không âm, tính giá trị của nó trên mỗi phần còn lại và lấy giá trị tối thiểu cộng thêm 1. Trên 0, xuất ra 0.

Kiểm tra xấu xí if n/k**p(tương đương if k**p<=n) là để ngăn chức năng đi vào phủ định và cố gắng đưa mindanh sách trống. Nếu Python có min([])=infinity, điều này sẽ không cần thiết.


Ồ Cái này ngắn hơn rất nhiều so với mã kiểm tra của tôi trên Python. +1!
Sherlock9

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.