【问题标题】:how to check that, is number square of another number, python3如何检查,是另一个数字的平方数,python
【发布时间】:2016-02-16 07:37:30
【问题描述】:

数字真的很长,(例如 n=341235129628026803631240389584456),我试过这样:if n**(1/2)-floor(n**(1/2)) == 0: true 但程序计数 n**(1/2) 像 1.8472550707144556e+16,但我需要没有 e 的数字

【问题讨论】:

    标签: python-3.x bignum


    【解决方案1】:

    你可以用binary search来做到这一点。
    对于 x = 1, 2, ..., k, ...(即自然数),函数 f(x) = x2 单调递增。因此,方程 f(m) = m2 = n 至多有一个根(相对于 m),您可以通过二分搜索找到它。
    它将需要 O(log3(n)) 次操作(因为 BS 有 O(log(n)) 次迭代,每一次都需要平方,可以在 O(log 2(n)))。

    实现可能如下所示:

    def find_if_square(n):
      L, R = 0, n + 1
      while R - L > 1:
        M = (R + L) // 2
        if M * M <= n:
          L = M
        else:
          R = M
    
      return L * L == n
    

    这里我们维护一个不变量:L2 &leq; n 2。 L和R之间的距离减小,直到R = L + 1。然后我们只需要检查L2是否严格等于n(否则,根据我们的不变量,它更小)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多