python中大数的阶乘

2023-11-25

这是我的阶乘方法:

def factorial(n):
    '''Returns factorial of n'''
    r = 1
    for i in range(1, n + 1):
        r *= i
    return r

我认为这非常简单,但我猜你可以做得更有效,因为像 100000 这样的大数字需要很长时间。我的问题是,有吗? math.factorial() 也不好,它花费的时间大致相同。


按顺序将数字相乘,

r = 1
for i in range(1, n + 1):
    r *= i
return r

非常快地创建一个大数(如数万位),然后您会进行大量的一个大数和一个小数的乘法。至少有一个因子很大的乘法运算速度很慢。

例如,您可以通过减少涉及大量数字的乘法次数来大大加快速度

def range_prod(lo,hi):
    if lo+1 < hi:
        mid = (hi+lo)//2
        return range_prod(lo,mid) * range_prod(mid+1,hi)
    if lo == hi:
        return lo
    return lo*hi

def treefactorial(n):
    if n < 2:
        return 1
    return range_prod(1,n)

产生,计时计算100000! % 100019(我首先尝试len(str(fun(100000)),但是转换为字符串的速度非常慢,因此这使得差异看起来比实际情况要小):

$ python factorial.py 
81430
math.factorial took 4.06193709373 seconds
81430
factorial took 3.84716391563 seconds
81430
treefactorial took 0.344486951828 seconds

所以加速超过 10 倍100000!.

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

python中大数的阶乘 的相关文章

随机推荐

  • SPARQL - 选择 dbpedia 资源最相关的类别

    我有一个 dbpedia 资源 我想获取所有相关的 dbpedia 类别 为此 我编写了这个 SPARQL 查询 SELECT p o WHERE
  • keyup 在 Android 上的 Chrome 上不起作用

    我正在使用引导程序提前输入 它依赖于这个 jQuery 代码来工作 el on keyup doSomething 在 Windows 上的 Chrome 上 它运行良好 在 Android 上的 Chrome 上则不然 keyup 事件永
  • 如何防止 Visual Studio 设计器在 DataGridView 中自动生成列?

    我在子类中生成所有列DataGridView以编程方式 然而 Visual Studio 2008 不断读取我的构造函数类 它填充DataTable具有空内容并将其绑定到DataGridView 并为中的列生成代码InitializeCom
  • JGit 克隆存储库

    我正在尝试使用 JGit 克隆 Git 存储库 但遇到 UnsupportedCredentialItem 问题 My code FileRepositoryBuilder builder new FileRepositoryBuilder
  • 是否可以将“require”和“import”与Webpack一起使用?

    我们必须更新一些依赖项才能切换到 Webpack 4 并且在尝试混合时在 webpack 中收到警告 在浏览器中收到错误import and require在同一个项目内 我们有一个very大型项目 300 个文件 其中一些文件使用var
  • DotNetCore:GetInvalidFileNameChars 的跨平台版本?

    我正在构建一个可在 Windows 和 Ubuntu 系统上运行的 Net Core 2 0 控制台应用程序 我有一个字符串需要转换为安全的文件名 目前我正在使用以下代码来实现此目的 var safeName string Join nam
  • __func__ C++11 函数的局部预定义变量,无法编译

    The func 函数的 C 11 本地预定义变量无法在使用默认内置 Visual Studio 2012 v110 编译器或 2012 年 11 月 CTP v120 CTP Nov2012 编译器的 Visual Studio 2012
  • 将选项 [keepaspectratio=true, scale = 0.75] 添加到 Sweave 中的 \includegraphics{}

    我有以下 R 代码 lt
  • Android - 推送通知已开启?

    如何以编程方式检查用户是否在应用程序设置中关闭推送通知 我可以直接从应用程序打开应用程序设置意图来提示用户将其打开吗 Thanks 假设您指的是 Google Cloud Messaging 因为您使用的是 android 和推送通知标签
  • PHP 请求生命周期

    好吧 我对 PHP VM 的了解还比较幼稚 最近我一直在想一些事情 特别是 Web 应用程序的 PHP 请求生命周期是什么样的 我找到一篇文章here这给出了很好的解释 但我觉得有has更贴近故事 根据文章的解释 每次向服务器发出请求时都会
  • 如何在VBA中使用列/行索引作为范围

    喜欢使用Cells 1 1 代替Range A1 在 VBA 中使用列 行索引作为范围的最佳方法是什么 我想出了两种解决方案来表示 Range A A Range Cells 1 1 Cells Columns 1 Rows count 1
  • 如何解释 ELF 可执行文件中的动态符号表?

    我正在考虑解释动态符号表 dynsym 的 ELF 可执行文件 我可以成功解释符号表 symtab 每个符号 16 个字节 使用value属性来表示符号的地址和name属性表示字符串开头的偏移量 strtab部分 但我无法解释动态符号表 d
  • C#:如何从资源文件加载光标?

    我已将文件 x ani 导入到资源文件Resources resx 中 现在尝试使用 ResourceManager GetObject aero busy ani 加载该文件 Cursor Current Cursor Resources
  • ASP.Net MVC 中的线程安全

    我怀疑这也适用于一般的 ASP Net 但我不确定 如果我在控制器上有一个操作方法 比如 MyController DoSomethingExciting 并且三个客户端 同时 点击它 那么它本质上是线程安全的 还是我需要做一些事情来确保三
  • Objective C:我的自定义 -init 方法没有被调用

    我有一个从 UIView 派生的类 我想为其创建一个 init 类 如下所示 id init if self super init my initializations here return self 不幸的是 我知道 init 没有被调
  • 如何在 Apache 2.x 中使用 mod_deflate 预压缩文件?

    我通过 apache 提供所有内容Content Encoding zip但这是动态压缩的 我的大部分内容都是磁盘上的静态文件 我想预先对文件进行 gzip 压缩 而不是每次请求时都对其进行压缩 我相信 这是一件事 mod gzip在 Ap
  • 高效的Python IPC [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在Python3中制作一个应用程序 它将分为batch and gui部分 Batch负责处理逻辑和gui负责显示它 Which 进程间通信 I
  • 如何将微调器添加到 ActionBar?

    我试图让我的微调器作为操作栏下拉列表项工作 但我似乎根本无法实现它 在谷歌搜索后没有太多关于此的教程 我认为它与 setListNavigationCallbacks 有关行代码 我只是不知道如何从该行开始工作 setup action b
  • 倒计时器 - iPhone [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我想显示倒计时器 我有开始日期和结束日期 我需要显示剩
  • python中大数的阶乘

    这是我的阶乘方法 def factorial n Returns factorial of n r 1 for i in range 1 n 1 r i return r 我认为这非常简单 但我猜你可以做得更有效 因为像 100000 这样