Computer >> Máy Tính >  >> Lập trình >> Python

Tìm N lớn nhất sao cho tổng bình phương của N số tự nhiên đầu tiên không lớn hơn X trong Python


Giả sử chúng ta có một số nguyên X cho trước, chúng ta phải tìm giá trị lớn nhất N sao cho tổng của N số tự nhiên đầu tiên không được vượt quá giá trị X.

Vì vậy, nếu đầu vào là X =7, thì đầu ra sẽ là 2 vì 2 là giá trị lớn nhất có thể có của N, với N =3, tổng của chuỗi sẽ vượt quá X =7 Vì vậy, 1 ^ 2 + 2 ^ 2 + 3 ^ 2 =1 + 4 + 9 =14.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Định nghĩa một hàm sum_of_squares (). Điều này sẽ mất N

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

  • trả lại res

  • Từ phương thức chính, thực hiện như sau -

  • thấp:=1

  • cao:=100000

  • N:=0

  • trong khi thấp - =cao, thực hiện

    • giữa:=(cao + thấp) / 2

    • nếu sum_of_squares (giữa) - =X, thì

      • N:=mid

      • thấp:=mid + 1

    • nếu không,

      • cao:=mid - 1

  • trả về N

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

 def sum_of_squares (N):res =(N * (N + 1) * (2 * N + 1)) // 6 return resdef get_max (X):low, high =1, 100000 N =0 khi low <=high:mid =(high + low) // 2 if sum_of_squares (mid) <=X:N =mid low =mid + 1 else:high =mid - 1 return NX =7print (get_max (X))  

Đầu vào

 7 

Đầu ra

 2