ฉันต้องรวมสี่เหลี่ยมจัตุรัสลูกบาศก์กำลังสี่และอื่น ๆ จำนวนเท่าใด


14

คุณจะได้รับติดลบและจำนวนเต็มn p >= 2คุณจำเป็นต้องเพิ่มบางpอำนาจ -th ( p=2สี่เหลี่ยมหมายถึงp=3หมายถึงก้อน) nพร้อมที่จะได้รับ สิ่งนี้เป็นสิ่งที่ไม่จำเป็นเสมอไปnแต่คุณไม่ทราบว่ามีpพลังที่มากมาย(ของจำนวนเต็มบวกใด ๆ) ที่คุณต้องการ

นี่คืองานของคุณ: พบจำนวนขั้นต่ำของpอำนาจ -th 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

ที่เกี่ยวข้องกับบทความวิกิพีเดียในการแก้ปัญหานี้ปัญหาของ Waring

กฎระเบียบ

  • รหัสของคุณจะต้องเป็นโปรแกรมหรือฟังก์ชั่น

  • อินพุตเป็นจำนวนเต็มสองจำนวนnและpในลำดับใดก็ได้ คุณสามารถสมมติว่าอินพุตทั้งหมดนั้นถูกต้อง ( nเป็นจำนวนเต็มบวกใด ๆp >= 2

  • nเอาท์พุทเป็นจำนวนเต็มแทนจำนวนของผู้มีอำนาจที่จำเป็นในการที่จะสรุปผล

  • นี่คือรหัสกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดชนะจึงไม่จำเป็นต้องมีประสิทธิภาพมากที่สุด

  • อนุญาตให้มีบิวด์อินใด ๆ และทั้งหมด

เช่นเคยหากปัญหายังไม่ชัดเจนโปรดแจ้งให้เราทราบ ขอให้โชคดีและการเล่นกอล์ฟที่ดี!


ดูเหมือนว่ากำลังดุร้ายจะชนะ ฉันหวังว่าจะไม่
lirtosiast

3
ปัญหานี้ยากอย่างเหลือเชื่อและฉันสงสัยว่าคำตอบใด ๆ จะเสร็จสิ้นในขณะที่ให้ผลลัพธ์ที่ถูกต้อง
orlp

อย่างน้อยก็มีขอบเขตบน
qwr

คำตอบ:


5

Pyth, 20 19 ไบต์

บันทึก1 ไบต์ขอบคุณ FryAmTheEggman

L&bhSmhy-b^dQS@bQyE

นำข้อมูลเกี่ยวกับสองบรรทัดแรกแล้วpn

ลองออนไลน์ ชุดทดสอบ

คำอธิบาย

รหัสกำหนดฟังก์ชัน recursive ที่ส่งกลับผลการ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

Mathematica 61 50 ไบต์

บันทึกด้วย 11 ไบต์โดย LegionMammal978

เมื่อถูก จำกัด ให้อยู่ในอำนาจการนับตัวเลขปัญหานี้เป็นเรื่องง่าย (ใน Mathematica) เมื่อขยายเพื่อรวมพลังของจำนวนเต็มมันเป็นฝันร้าย

(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]ค้นหาทุกกรณีที่nสามารถแสดงเป็นผลรวมของkจำนวนเต็มบวกยกpกำลัง -th


ตัวอย่างเช่น,

PowersRepresentations[1729, 2, 3]

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

การตรวจสอบ

1^3 + 12^3

1729


9^3 + 10^3

1729


ภาษาที่มีความสามารถในการแข่งขันเช่น Mathematica เอาชนะจุดประสงค์ของสิ่งเหล่านี้ ... มันไม่ได้ใช้ความคิดสร้างสรรค์ในการรู้ชื่อฟังก์ชั่น แต่ก็ยังเขียนได้ดี
csga5000

1
@ csga5000 เฮ้ภาษาการเล่นกอล์ฟชนะ 99% ของความท้าทายในเว็บไซต์นี้ ...
LegionMammal978

@ LegionMammal978 ในขณะที่ผมไม่เห็นด้วยกับจุด csga ของการเล่นกอล์ฟสิ่งลงในการเล่นกอล์ฟภาษาต้องมีขนาดใหญ่ปริมาณของความคิดสร้างสรรค์
ลูกบิดประตู

2
เห็นด้วยไม่มีรางวัลสำหรับความคิดสร้างสรรค์ในการส่งนี้ หรือเพื่อความกะทัดรัด: การส่งผ่าน Pyth นั้นมีความยาวน้อยกว่าครึ่ง ปัญหากลายเป็นสิ่งที่ท้าทายสำหรับภาษาเช่น Mathematica เมื่อพวกเขาสามารถสร้างใหม่เป็นตัวอย่างของปรากฏการณ์ทั่วไปและเมื่อการรวมกันของฟังก์ชั่นระดับสูงผิดปกติสามารถมีบทบาทได้ พวกเขายังน่าสนใจมากขึ้น
DavidC

3

Java - 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)
PurkkaKoodari

@ Pietu1998 ตกลงฉันจะแก้ไข
Yassin Hajaj

@ Pietu1998 คุณจะทำอย่างไร
Yassin Hajaj

ฉันทำมันซ้ำแล้วซ้ำอีกตรวจสอบพลังที่เป็นไปได้ทุกหมายเลข
PurkkaKoodari

1
@YassinHajaj +1 สำหรับ java และทำด้วยตัวเอง
csga5000

1

Python 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ใช้พลังงานแต่ละส่วนซ้ำซึ่งเหลือส่วนที่ไม่เป็นลบทิ้งคำนวณค่าของมันในแต่ละส่วนที่เหลือ

การตรวจสอบที่น่าเกลียดif n/k**p(เทียบเท่าif k**p<=n) คือการหยุดฟังก์ชั่นจากการเข้าไปในเชิงลบและพยายามที่จะใช้minรายการที่ว่างเปล่า ถ้า Python มีmin([])=infinityก็ไม่จำเป็นต้องทำเช่นนี้


ว้าว. นี้เป็นจำนวนมากสั้นกว่ารหัสการทดสอบของฉันเกี่ยวกับงูหลาม +1!
Sherlock9

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.