Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ค้นหาค่าสูงสุด N โดยที่ผลรวมกำลังสองของจำนวนธรรมชาติ N ตัวแรกไม่เกิน X ใน Python


สมมติว่าเรามีจำนวนเต็ม X ที่กำหนด เราต้องหาค่าสูงสุด N เพื่อให้ผลรวมของจำนวนธรรมชาติ N ตัวแรกไม่ควรเกินค่า X

ดังนั้น หากอินพุตเท่ากับ X =7 ผลลัพธ์จะเป็น 2 เนื่องจาก 2 คือค่าสูงสุดที่เป็นไปได้ของ N สำหรับ N =3 ผลรวมของอนุกรมจะเกิน X =7 ดังนั้น 1^2 + 2^ 2 + 3^2 =1 + 4 + 9 =14

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน sum_of_squares() นี่จะใช้เวลา N

  • res :=(N *(N + 1) *(2 * N + 1)) / 6

  • ผลตอบแทน

  • จากวิธีหลัก ให้ทำดังนี้ −

  • ต่ำ :=1

  • สูง :=100000

  • ไม่มี :=0

  • ในขณะที่ต่ำ −=สูง ทำ

    • กลาง :=(สูง + ต่ำ) / 2

    • ถ้า sum_of_squares(กลาง) −=X แล้ว

      • N :=กลาง

      • ต่ำ :=กลาง + 1

    • มิฉะนั้น

      • สูง :=กลาง - 1

  • กลับ N

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def sum_of_squares(N):res =(N * (N + 1) * (2 * N + 1)) // 6 คืนค่า resdef get_max(X):ต่ำ, สูง =1, 100000 N =0 ในขณะที่ต่ำ <=สูง:กลาง =(สูง + ต่ำ) // 2 ถ้า sum_of_squares(กลาง) <=X:N =กลางต่ำ =กลาง + 1 อื่น:สูง =กลาง - 1 คืน NX =7print(get_max(X)) 

อินพุต

7

เอาท์พุต

2