"如何判断一个自然数是否是某个数的平方"(python)

匿名 (未验证) 提交于 2019-12-02 22:11:45

题目描述:设计一个算法,判断给定的一个数n是否是某个数的平方,不能使用开放运算。

分析与解答:

方法一:直接计算法

由于不能使用开方运算,因此最直接的方法就是计算平方。主要思路为:对1到n的每个数i,计算它的平方m,如果m<n,那么继续遍历下一个值(i+1),如果m == n ,那么说明n是某个数的平方,如果m>n,那么n不能表示成某个数的平方。

 def isPower(n):     if n <= 0:         print(n+"不是自然数")         return False     i = 1     while i < n:         m = i * i         if m == n:             return True         elif m > n:             return False         i += 1     return False  if __name__ == "__main__":     n1 = 15     n2 = 16     if isPower(n1):         print(str(n1)+"是某个自然数的平方")     else:         print(str(n1)+"不是某个自然数的平方")          if isPower(n2):         print(str(n2)+"是某个自然数的平方")     else:         print(str(n2)+"不是某个自然数的平方")

方法二:二分查找法

与方法一类似,这种方法的主要思路还是查找从1~n的数字中看,是否存在一个数m,使得m的平方为n.不过在查找的过程中使用了二分查找的方法。具体的思路为:首先判断mid = (1+n)/2的平方power与m的大小,如果power >m ,那么说明在[1, mid-1]区间继续查找,否则在[mid+1, n]的区间继续查找。

 def isPower(n):     low = 1     high = n     while low < high:         mid = (low + high) / 2         power = mid * mid         # 接着在1~mid -1 区间查找         if power > n:             high = mid - 1         elif power < n:             low = mid + 1         else:             return True     return False

方法三:减法运算法

 def isPower(n):     minus = 1     while n > 0:         n = n - minus         # n 是某个数的平方         if n == 0:             return True         # n 不是某个数的平方         elif n < 0:             return False         # 每次减数都加2         else:             minus += 2     return False

文章来源: https://blog.csdn.net/qq_42013574/article/details/88851860
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!