python中的整数平方根

2024-01-06

python 或标准库中是否有整数平方根?我希望它是精确的(即返回一个整数),并且如果输入不是完美的平方则引发异常。

我尝试使用这段代码:

def isqrt(n):
    i = int(math.sqrt(n) + 0.5)
    if i**2 == n:
        return i
    raise ValueError('input was not a perfect square')

但它很丑陋,而且我不太相信它能处理大整数。我可以迭代这些方块,如果超出了该值,我可以放弃,但我认为这样做会有点慢。另外,这肯定已经在某个地方实施了吗?


See also: Check if a number is a perfect square https://stackoverflow.com/questions/2489435.


Note:现在有math.isqrt https://docs.python.org/3/library/math.html#math.isqrt在 stdlib 中,自 Python 3.8 起可用。

牛顿法对于整数非常有效:

def isqrt(n):
    x = n
    y = (x + 1) // 2
    while y < x:
        x = y
        y = (x + n // x) // 2
    return x

这将返回最大的整数x为此x * x不超过n。如果你想检查结果是否正好是平方根,只需执行乘法来检查是否n是一个完美的正方形。

我讨论了这个算法,以及用于计算平方根的其他三种算法,位于my blog http://programmingpraxis.com/2012/06/01/square-roots/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中的整数平方根 的相关文章

随机推荐

  • 从源代码管理中丢失后如何生成新的 .pfx 文件?

    我正在使用 GitHub 托管我正在开发的开源 Windows 10 应用程序 我不小心忽略了应用程序的 PFX 文件 因此当我删除本地副本并重新克隆存储库时 我没有了MyApp TemporaryKey pfx文件 现在 Visual S
  • NLTK 上下文无关语法生成器

    我正在开发一个带有 Unicode 字符的非英语解析器 为此 我决定使用 NLTK 但它需要预定义的上下文无关语法 如下所示 S gt NP VP VP gt V NP V NP PP PP gt P NP V gt saw ate wal
  • 在 Web 应用程序和控制台应用程序之间共享配置设置

    我想与我的控制台应用程序 同一解决方案中的 2 个项目 共享我的 VS2010 3 5 Web 应用程序设置 例如连接字符串 smtp log4net 设置 这看起来很接近 http devlicio us blogs derik whit
  • PHP - 带 GET 查询的加号

    我有一个 PHP 脚本 它通过以下方法对字符串进行基本加密
  • iOS 7 自定义转换故障

    该视频显示了我遇到的问题 http www youtube com watch v C9od 2KZAbs http www youtube com watch v C9od 2KZAbs 我正在尝试使用 UIPanGestureRecog
  • Django 1.9 URLField 删除必要的 http:// 前缀

    我看到了很多关于此的问题 但还没有找到答案 这是我的模型 class UserProfile models Model user models OneToOneField User website models URLField max l
  • Sublime Text 2 是用什么编程语言编写的 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我喜欢 Sublime text 2 及其跨平台性 你知道这个程序是用什么语言编写的 或者使用了哪些技术吗 谢谢 来自推特 http mobile t
  • UISearchDisplayController 覆盖层和栏之间的间隙

    在我的应用程序中 我尝试添加搜索功能 我有表格视图控制器和自定义顶部栏视图 我在其中显示UISearchBar 问题是覆盖视图总是位于顶部栏下方一点 并且增加了它们之间的间隙 In my 表视图控制器 m文件的viewDidLoad sup
  • C++调用基类方法切片对象

    我有这样的事情 include
  • 如何获取函数内使用的内置函数的列表

    假设我有一个名为Fun1其中我针对不同的不同流程使用了许多不同的 R 内置函数 那么如何获取该函数内使用的内置函数的列表Fun1 Fun1 lt function x y sum x y mean x y c x y print x pri
  • Vim 中是否可以实现所谓的“无干扰模式”?

    只是好奇 有点像编辑的 无干扰模式 崇高的文字 http www sublimetext com blog articles distraction free editing 是否可以将所有文本质心到视场的中间 使用宽屏显示器在全屏模式下盯
  • Slim 框架上重定向错误

    我想重定向到一个页面 error php 或者可能是 404 406 php 无论错误是什么 具体取决于我网站中表单中的信息 我设法记录了这样的错误 if date gt curdate return response gt withSta
  • 多行从右到左文本方向的文本溢出省略号

    适用于单行的文本溢出省略号ltr and rtl方向但省略号不起作用rtl方向 如果我删除 改变方向rtl一切都运行良好 可能是什么错误 index html
  • 重载的 ++ 运算符在 C++ 中不起作用

    有人可以向我解释为什么我的重载 之前版本 没有更新该值吗 片段是这样的 circle circle operator Area Area 2 0 return this int main class circle c1 4 1 1 c2 1
  • AutoMock - 如何使用键控注册进行单元测试?

    我在使用 Autofac 键控注册的工厂编写测试时遇到问题 在 Autofac 模块中 我注册如下内容 builder RegisterType
  • python套接字和VPN

    我的问题是 如果我使用VPN并尝试在Python套接字消息上发送消息 而不是任何协议 我的套接字流量是否会通过VPN并且我的IP对消息接收者隐藏 我发现使用wireshark看不到流量 因为它不属于任何协议 谢谢您的帮助 与 VPN 建立套
  • 如何在 CentOS 7 中为终端创建键盘快捷键

    刚刚在我的笔记本电脑上安装了 CentOS 7 这个新版本的 CentOS 与旧版本有很大不同 我无法以旧方式为终端创建键盘快捷键 有人知道怎么做吗 Go to Settings gt gt gt keyboard gt gt gt Sho
  • 我可以同时安装 Visual Studio 2010 和 2008 吗?

    我需要在一台计算机上安装它们 首先用于教育目的 其次用于工作 会不会有兼容性问题 是的 我将它们并排安装 没有任何问题
  • jQuery 和 AJAX 响应标头

    我收到了这个 jQuery AJAX 调用 并且响应以 302 重定向的形式来自服务器 我想采用此重定向并将其加载到 iframe 中 但是当我尝试使用 javascript 警报查看标头信息时 它显示为空 即使 firebug 正确地看到
  • python中的整数平方根

    python 或标准库中是否有整数平方根 我希望它是精确的 即返回一个整数 并且如果输入不是完美的平方则引发异常 我尝试使用这段代码 def isqrt n i int math sqrt n 0 5 if i 2 n return i r