2022年 11月 5日

python求平方根的三种方法

python求平方根的三种方法

  • 题干描述
  • 题目解答

题干描述

没啥好说的qwq,求根号下x,并舍弃小数部分,只保留整数

题目解答

方法一:不多bb,直接0.5次方(这应该是最没有营养的解法,面试官估计不会买账23333)

x = int(input())
res = int(x **0.5)
print(res)
  • 1
  • 2
  • 3

该方法内存消耗是最大的

方法二:同样是直接算,这里使用指对数袖珍计算器,由于
在这里插入图片描述
所以引入math模块

import math
x = int(input())
if x == 0:
    res = 0
else:
    res = int(math.exp(0.5*math.log(x)))
    if (res + 1)**2 <= x :
        res = res + 1
print(res)
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这里有个坑人的地方,就是因为计算机无法精确储存指对运算得出的浮点数值,所以有可能在返回整数的时候造成误差,所以要判断加一后是否满足题设条件

该方法执行用时是最小的

方法三:二分法,大概是最经典的方法

x = int(input())
low, high, ans = 0, x, -1
while low <= high:
    mid = (low + high) // 2
    if mid * mid <= x:
        ans = mid
        low = mid + 1
    else:
        high = mid - 1
print(ans)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

二分法有多种写法,但这个应该是最简单的,不会出现死循环

方法三:牛顿迭代法
这里直接开传送门了,不是我懒,是别人写的太好了…
二分查找 + 牛顿法(Python 代码、Java 代码).

x = int(input())
if x == 0:
    res = 0
else :
	C,x0 = float(x),float(x)
	while True:
		xi = 0.5 * (x0 + C / x0)
		if abs(x0 - xi) < 1e-7:
			break
		x0 = xi
	res = int(x0)
print(res)
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

该方法内存消耗是最小的

题目源自leetcode69.