高效生成所有小于 N 的合数(及其因式分解)

2024-04-25

我想构建一个高效的 Python 迭代器/生成器,它会产生:

  • 所有小于 N 的合数
  • 连同他们的质因数分解

我将其称为“composites_with_factors()”

假设我们已经有小于 N 的素数列表,或者可以执行相同操作的素数生成器。

请注意,我:

  • 不需要按数字顺序生成数字
  • 不关心一开始是否产生 1
  • 不关心素数是否也产生

我认为这可以通过一个聪明的递归生成器来完成......

因此,例如,调用composites_with_factors(16) 可能会产生:

# yields values in form of "composite_value, (factor_tuple)"
2, (2)
4, (2, 2)
8, (2, 2, 2)
6, (2, 3)
12, (2, 2, 3)
10, (2, 5)
14, (2, 7)
3, (3)
9, (3, 3)
15, (3, 5)
5, (5)
7, (7)
11, (11)
13, (13)

正如您从我的输出顺序中看到的那样,我的设想是从可用素数生成器上的最小素数开始,输出该素数小于 N 的所有幂,然后再次尝试该素数的幂,但在每个阶段都会看看我是否可以应用额外素数的幂(并且仍然小于 N)。当与该素数的所有组合完成后,将其丢弃,并使用素数生成器上可用的下一个最低素数重复。

我尝试使用“递归生成器”来执行此操作,这让我非常困惑何时使用“yield”、“raise StopIteration”或“return”退出递归,或者干脆退出递归函数。

感谢您的智慧!

附加说明:

I do现在有一种方法可以做到这一点:我已经编写了一个对数字进行因式分解的函数,因此我可以将它们分解为素数,并产生结果。没问题。我依靠“数字 N 的最低质因数是多少”的缓存来保持速度非常快......对于 N 高达 1000 万。

然而,一旦我脱离了缓存,我们就会将其转变为“天真的”保理。 (恶心。)

这篇文章的要点是:

  • 我假设“从它们的因子生成大型复合材料”将比“分解大型复合材料”更快......特别是因为我不关心顺序,并且
  • 如何让 Python 生成器“递归地”调用自身,并生成单个生成内容流?

假设primesiter(n)在所有素数上创建一个迭代器,直到n(1 不应包含在primesiter,或者在下面的代码中输入 inf。环形)

def composite_value(n, min_p = 0):
    for p in primesiter(n):
        # avoid double solutions such as (6, [2,3]), and (6, [3,2])
        if p < min_p: continue
        yield (p, [p])
        for t, r in composite_value(n//p, min_p = p): # uses integer division
            yield (t*p, [p] + r)

Output

>> list(composite_value(16))
[(2, [2]),
 (4, [2, 2]),
 (8, [2, 2, 2]),
 (16, [2, 2, 2, 2]),
 (12, [2, 2, 3]),
 (6, [2, 3]),
 (10, [2, 5]),
 (14, [2, 7]),
 (3, [3]),
 (9, [3, 3]),
 (15, [3, 5]),
 (5, [5]),
 (7, [7]),
 (11, [11]),
 (13, [13])]

注意:它还包括 n (= 16),并且我使用列表而不是元组。如果需要的话,这两个问题都可以轻松解决,但我将把它留作练习。

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

高效生成所有小于 N 的合数(及其因式分解) 的相关文章

随机推荐

  • Windows 应用商店应用程序中不会调用 Page.OnNavigedTo

    我有一个 Windows 应用商店混乱的应用程序 我添加了一个基本页面 它添加了通用类 例如 LayoutAwarePage 但是当应用程序启动时 Page OnNavieratedTo 不会被调用 MSDN 文档说 当页面被加载并成为当前
  • AndroidManifest.xml 中的使用库

    我目前在我的 AndroidManifest xml 中有这个 使用库 android name com google android maps android required false google 地图 api 的指定要求不是强制性
  • Google Places API 返回“不支持的字段名称‘address_component’”

    我正在使用 Google Places API 查找印度一个小村庄的地址详细信息 如下所示文档 https developers google com maps documentation places web service search
  • Chart.js 更改图例切换行为

    我有一个来自 Chart js 的雷达图 目前 它加载了所有效果很好的数据 并且支持图例的行为是通过单击图例标签来关闭与图例相关的数据 我希望能够单击图例标签 然后关闭所有其他标签 并可能引入 全部 选项 这对于 Chart js 可行吗
  • 修改表添加外键失败

    我有3个表 它们都有innodb引擎 video url title desc country url gt primary key videoCat url category url category gt primary key fav
  • Angular 4 Typescript - 构造随后 7 天的日期数组

    我想构造一个包含 7 个日期的数组 这些日期将是 SelectedDate 后的 7 天 我在 Component ts 中编写了以下代码 public selectedWeekDates Date public selectedWeek
  • 单元测试应该默认使用“抛出异常”吗?

    换句话说 我应该附加throws Exception我的所有或大部分单元测试 当您使用 Android Studio 生成单元测试 命令 N gt 测试方法 时 它默认添加抛出异常 前任 Test public void someMetho
  • 触发其他配置并使用 Jenkins 发送当前构建状态

    在某个 Jenkins 配置中 我希望触发另一个配置 post建立行动 我想将当前构建状态作为参数之一传递 IE 表示状态 SUCCESS FAIL UNSTABLE 的字符串 int 我有两个选项来创建构建后触发器 Using the j
  • 示例软键盘双字母

    我是 android 的初学者开发人员 我下载了示例 SoftKeyboard 的源代码 https android googlesource com platform development android 2 3 3 r1 1 samp
  • 添加新数据源(mysql)wildfly

    我正在尝试将新的数据源 mysql jdbc 驱动程序添加到我的 Wildfly 服务器 我创建了文件夹 wildfly x x x modules system layers base com mysql main 我这里有 jdbc j
  • 我可以将 Coq 证明提取为 Haskell 函数吗?

    自从学了一点 Coq 以来 我就想学着写一个所谓的除法算法的 Coq 证明 它实际上是一个逻辑命题 forall n m nat exists q nat exists r nat n q m r 我最近利用我学到的知识完成了这项任务软件基
  • 如何对二维 Java 数组进行切片?

    folks 我正在使用 JTables 并有一个二维数组 我需要删除数组中每一行的第一个元素 除此之外还有更简单的方法吗 int height data2 length int width data2 0 length Object dat
  • 需要帮助了解主干中嵌套视图的基础知识

    我一直在阅读有关backbone js 中嵌套视图的大量内容 并且了解其中的很多内容 但仍然令我困惑的一件事是 如果我的应用程序有一个 shell 视图 其中包含页面导航 页脚等子视图 这些子视图在使用应用程序的过程中不会改变 那么我是否需
  • 将 ListView 中的 SelectedItems 绑定到 Windows Phone 8.1 中的 ViewModel

    我有以下代码
  • Python / Pandas - 用于查看数据帧或矩阵的 GUI [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 Pandas 包 它创建一个 DataFrame 对象 它基本上是一个标记矩阵 通常 我的
  • Laravel mix,在resources中调用app.js

    我有一个带有 laravel 和 vuejs 的网络应用程序 我使用 laravel mix 并且在我的 webpack mix js 中我有 mix js resources assets js app js public js 在我看来
  • 我收到来自 php 和 js 的空白电子邮件

    请帮助我解码真正的问题是什么 问题是 尽管我对此代码进行了所有调整和研究 但我仍然收到一封空白电子邮件 下面是我的 html javascript ajax 和 php 代码 HTML 代码 名为 contact html 的文件
  • PHP echo 与 PHP 短 echo 标签

    它们的安全性相同吗 我被告知使用 或者 当在 JavaScript 内回显数据时 它必须是 JavaScript 编码的
  • SQL Server 的 mysqldump 等效项

    SQL Server 是否有与 MySQL 具有 mysqldump 等效的模式和数据导出 转储工具 试图重新定位旧的 ASP 站点 但我对在 Windows 服务器上工作感到很不高兴 注意 DTS 导出实用程序自己似乎可以导出数据 而无需
  • 高效生成所有小于 N 的合数(及其因式分解)

    我想构建一个高效的 Python 迭代器 生成器 它会产生 所有小于 N 的合数 连同他们的质因数分解 我将其称为 composites with factors 假设我们已经有小于 N 的素数列表 或者可以执行相同操作的素数生成器 请注意