查找最大N,以使Python中前N个自然数的平方和不超过X

假设我们有一个给定的整数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

  • N:= 0

  • 而低 - 高=,做

    • 高:=中-1

    • N:=中

    • 低:=中+ 1

    • 中间:=(高+低)/ 2

    • 如果sum_of_squares(MID) -  = X,则

    • 除此以外,

    • 返回否

    示例

    让我们看下面的实现以更好地理解-

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

    输入值

    7

    输出结果

    2
    猜你喜欢