"""Integer Square Root Algorithm -- An efficient method to calculate the square root of anon-negative integer 'num' rounded down to the nearest integer. It uses a binary searchapproach to find the integer square root without using any built-in exponent functionsor operators.* https://en.wikipedia.org/wiki/Integer_square_root* https://docs.python.org/3/library/math.html#math.isqrtNote:- This algorithm is designed for non-negative integers only.- The result is rounded down to the nearest integer.- The algorithm has a time complexity of O(log(x)).- Original algorithm idea based on binary search."""def integer_square_root(num: int) -> int:"""Returns the integer square root of a non-negative integer num.Args:num: A non-negative integer.Returns:The integer square root of num.Raises:ValueError: If num is not an integer or is negative.>>> [integer_square_root(i) for i in range(18)][0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4]>>> integer_square_root(625)25>>> integer_square_root(2_147_483_647)46340>>> from math import isqrt>>> all(integer_square_root(i) == isqrt(i) for i in range(20))True>>> integer_square_root(-1)Traceback (most recent call last):...ValueError: num must be non-negative integer>>> integer_square_root(1.5)Traceback (most recent call last):...ValueError: num must be non-negative integer>>> integer_square_root("0")Traceback (most recent call last):...ValueError: num must be non-negative integer"""if not isinstance(num, int) or num < 0:raise ValueError("num must be non-negative integer")if num < 2:return numleft_bound = 0right_bound = num // 2while left_bound <= right_bound:mid = left_bound + (right_bound - left_bound) // 2mid_squared = mid * midif mid_squared == num:return midif mid_squared < num:left_bound = mid + 1else:right_bound = mid - 1return right_boundif __name__ == "__main__":import doctestdoctest.testmod()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型