较大数的非不同质因数

2024-04-20

我编写并使用这个函数来生成数字的质因数:

import numpy as np
from math import sqrt

def primesfrom3to(n):
    """ Returns a array of primes, p < n """
    assert n>=2
    sieve = np.ones(n/2, dtype=np.bool)
    for i in xrange(3,int(n**0.5)+1,2):
        if sieve[i/2]:
            sieve[i*i/2::i] = False
    return np.r_[2, 2*np.nonzero(sieve)[0][1::]+1]    

def primefactors(tgt,verbose=True):
    if verbose: 
        print '\n\nFinding prime factors of: {:,}'.format(tgt)

    primes=primesfrom3to(sqrt(tgt)+1)

    if verbose:
        print ('{:,} primes between 2 and square root of tgt ({:.4})'.
                      format(len(primes),sqrt(tgt))) 

    return [prime for prime in primes if not tgt%prime]

如果我用以下值来调用它欧拉计划 #3 http://projecteuler.net/problem=3,它成功地生成了不同素数的列表:

>>> print primefactors(600851475143)
Finding prime factors of: 600,851,475,143
62,113 primes between 2 and square root of tgt (7.751e+05)
[71, 839, 1471, 6857]

这符合什么Wolfram Alpha 生产 http://www.wolframalpha.com/input/?i=600851475143%20prime%20factors为主要因素。 (最大的是欧拉计划 #3 的正确答案)

现在假设我想要该数字 x 1e6 的因数:

>>> print primefactors(600851475143*1000000)
Finding prime factors of: 600,851,475,143,000,000
39,932,602 primes between 2 and square root of tgt (7.751e+08)
[2, 5, 71, 839, 1471, 6857]

对于这个更大的数字,Wolfram Alpha 生产 http://www.wolframalpha.com/input/?i=600851475143000000%20prime%20factors:

2**6 * 5**6 * 71 * 839 * 1471 * 6857

有没有一种简单的方法来修改我的代码,我可以计算出25作为较大数的质因数?

(我对它的原始代码或算法感兴趣——而不是指向能为我做这件事的库的指针,谢谢!)


传统的方法是依次除掉每个质因数,然后递归分解因式分解方法。一般来说,这比筛选所有素数要快,因为您只关心实际除以您的数字的(少数)素数。

当然,有很多很多比试除法更好的素因数分解算法;人们通常对大范围的数字使用二次筛之类的东西,在小端使用 Pollard 的 rho 方法,在大端使用数域筛。这些都是显著地更复杂。


由于您事先筛选了所有素数,因此您并不关心算法的效率。鉴于此,最简单的方法就是计算出多重性事后,这是 @tobias_k 所写的。您也可以将其分解为一个单独的函数,如下所示

def multiplicity(n, p):
    i = 0
    while not n % p:
        i, n = i+1, n/p
    return i

and then

>>> n = 600,851,475,143,000,000
>>> n = 600851475143000000
>>> factors = [2, 5, 71, 839, 1471, 6857]
>>> [(f, multiplicity(n,f)) for f in factors]
[(2, 6), (5, 6), (71, 1), (839, 1), (1471, 1), (6857, 1)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

较大数的非不同质因数 的相关文章

  • MySQL 的 read_sql() 非常慢

    我将 MySQL 与 pandas 和 sqlalchemy 一起使用 然而 它的速度非常慢 对于一个包含 1100 万行的表 一个简单的查询需要 11 分钟以上才能完成 哪些行动可以改善这种表现 提到的表没有主键 并且仅由一列索引 fro
  • 如何/在哪里发布 Python 包

    如果一个人创建了一个有用的 Python 包 那么如何 在哪里发布 宣传它以供其他人使用 我已经把它放到了 github 上 但几周后谷歌也没有找到它 包装整洁完整 我制作它供我个人使用 不与其他人分享将是一种耻辱 这是 PyPI 指南 h
  • 日期/时间值的 Django URL 转换器

    我正在尝试使用 Django 内置的 URL 转换器将 URL 中的日期时间字符串转换为视图中的日期对象 如果我手动输入 URL 它们会按预期工作 但尝试为其生成 URL 时找不到匹配项 我的转换器很简单 from django utils
  • 如何在代码中停止 autopep8 未安装消息

    我是一名新的 Python 程序员 使用 Mac 版本的 VS Code 1 45 1 创建 Django 项目 我安装了 Python 和 Django 扩展 每次我保存 Django 文件时 代码都会弹出此窗口 Formatter au
  • 可视化时间序列时标记特定日期

    我有一个包含几年数据的时间序列 例如 ts pd Series np random randn 1000 index pd date range 1 1 2000 periods 1000 ts ts cumsum ts plot 我还有两
  • Python:如何删除圆括号内的文本?

    我试过了 但没用 return re sub myResultStats text 建议 thanks 尝试这个 return re sub myResultStats text 括号表示捕获组 因此您必须转义它们
  • 识别 Windows 版本

    我正在编写一个打印出详细 Windows 版本信息的函数 输出可能是这样的元组 32bit XP Professional SP3 English 它将支持 Windows XP 及更高版本 我一直坚持获取 Windows 版本 例如 专业
  • python: X 服务器上的致命 IO 错误 11(资源暂时不可用):0.0

    我正在尝试读取一些图像 稍后打算对它们执行一些任务 同时将图像读入内存 我想显示动画 gif 图像 为此 我必须使用线程 现在它给出错误 python Fatal IO error 11 Resource temporarily unava
  • Python - 使用 win32com.client 将 Excel 单元格范围格式化为表格

    我正在尝试编写一个函数 该函数选择工作表中的所有非空单元格 根据内容调整列宽 并将其格式化为表格 我被困在最后一点 这是我当前的代码 import win32com client from win32com client import co
  • Python 中 Goto 标签的替代方案?

    我知道我不能使用 Goto 我也知道 Goto 不是答案 我读过类似的问题 但我只是想不出解决我的问题的方法 所以 我正在编写一个程序 你必须在其中猜测一个数字 这是我遇到问题的部分的摘录 x random randint 0 100 I
  • 如何将 Jinja 与 Twisted 一起使用?

    我正在计划使用 Python 与 Twisted Storm 和 Jinja 一起开发一个讨论软件 问题是 Jinja 不是为 Twisted 或异步套接字库而设计的 并且使用 Twisted 提供的性能是我不打算使用 Flask 的原因
  • __subclasses__ 没有显示任何内容

    我正在实现一个从适当的子类返回对象的函数 如果我搬家SubClass from base py 没有出现子类 subclasses 它们必须在同一个文件中吗 也许我从来没有直接导入subclass py对Python隐藏子类 我能做些什么
  • Python、cPickle、酸洗 lambda 函数

    我必须像这样腌制一组对象 import cPickle as pickle from numpy import sin cos array tmp lambda x sin x cos x test array tmp tmp tmp tm
  • Emacs:调试Python的方法

    我把这个贴在程序员 stackexchange com https softwareengineering stackexchange com questions 29844 emacs methods for debugging pyth
  • 没有名为 urllib.parse 的模块(我应该如何安装它?)

    我正在尝试在 CentOS 7 上运行 REST API 我读到 urllib parse is in Python 3 但我使用的是 Python 2 7 5 所以我不知道如何安装此模块 我安装了所有要求 但仍然无法运行该项目 当我寻找
  • 如何从 Selenium 获取元素的属性

    我正在 Python 中使用 Selenium 我想得到 val of a
  • 使用 PIL 合并图像时模式不匹配

    我正在传递 jpg 文件的名称 def split image into bands filename img Image open filename data img getdata red d 0 0 0 for d in data L
  • 如何克服 numpy.unique 的 MemoryError

    我正在使用 Numpy 版本 1 11 1 并且必须处理一个二维数组 my arr shape 25000 25000 所有值都是整数 我需要一个唯一的数组值列表 使用时lst np unique my arr 我正进入 状态 Traceb
  • Windows 10 上的 Tensorflow 安装问题

    我正在尝试在 Win 10 计算机上安装 Tensorflow 我成功安装了Python 3 7 然后尝试按照tensorflow org上的安装说明进行操作 执行时 pip install tensorflow 我收到以下错误消息 错误
  • mypy 错误:赋值中的类型不兼容(表达式的类型为“Dict[, ]”,目标的类型为“List[str]”)

    我尝试过了实例化一个空字典在现有字典的第二层上 然后为其分配一个键值对 但 MyPy 会抛出错误 这是一个最小的示例 当激活 MyPy 检查时它将重现它 result Test something result key result key

随机推荐

  • jQuery Uncaught TypeError 与 Theme Punch Revolution Slider

    我遇到了一个无法追踪的问题 我正在使用革命滑块 http themes themepunch com theme revolution jq我不断收到 jQuery 错误 Uncaught TypeError Cannot read pro
  • WordPress REST API - 允许任何人发帖

    我正在 WordPress 上构建一个应用程序 它需要一个简单的前端表单 任何人都可以提交需要保存在数据库中的信息 我正在尝试通过 REST API 来处理这个问题 由于应用程序的性质 提交此信息时不能进行任何页面重定向 我可以毫无问题地设
  • LinqDataSource:过滤并绑定到gridview

    问题没有按照我想要的方式解决 但我继续感谢 ukaszW pl 他的时间和努力 我正在使用 gridview 控件和 linqdatasource 它一切正常 我添加了 searchBySubject 的功能 并且添加了WhereParam
  • 如何将“旧的 spring mvc 控制器与 jsp”和“vaadin7 ui”集成在一起

    我正在尝试将 vaadin 与我的 spring mvc 应用程序集成 我有一些带有 jsp 文件的 url spring mvc 控制器使用它们 例如 mysite com spring mysite com spring example
  • Zend 引擎可以嵌入 PHP 之外吗?

    如果我记得的话 Zend 引擎的原始设计之一是它相对容易嵌入人们可能希望创建的其他语言 基本上 PHP 语法没有所有 PHP 模块 现在还是这样吗 嗯 Zend 引擎基本上是一个解释 PHP 字节码的虚拟机 基本上 您要做的就是为一种语言和
  • 为什么这个 css 动画无限自动播放轮播会在项目重置时跳转?

    我正在努力根据此处的示例创建无限自动播放轮播 https codepen io jackoliver pen qVbQqW https codepen io jackoliver pen qVbQqW 请注意 codepen 示例是多么流畅
  • java jar 的清单属性

    在您的帮助下 我完成了我的第一个 Java 项目 现在我想创建一个 jar 并从 jar 运行应用程序 Java 项目 它是一个普通的控制台应用程序 它有另一个项目 控制台应用程序 作为依赖项 我通过右键单击 导出 创建一个 jar 使用
  • 使用 C# 运行 T4 模板

    我有 T4 模板 mycode tt 它生成一个 cs 文件 我通常右键单击 tt 文件并选择 RunCustomTool 它会在内部获取 xml 文件并为我生成代码 现在我想使用 C Windows 应用程序运行自定义工具 因此 单击按钮
  • 如果您无法控制类,如何模拟类中的方法?

    我使用 Xunit 和 Moq 进行单元测试 到目前为止 我能够成功地模拟和测试接口中的方法 但是我应该如何模拟和测试我无法控制的类的方法 该类没有接口 方法也不是虚拟的 我研究了 Type Mock Isolator 但我无法使其工作 而
  • 订购 ActiveRecord 关系对象

    我有一个名为的 ActiveRecord 对象contact 它有一个关系叫做profiles 这些配置文件具有 url 属性 配置文件应按 url 按字母顺序排序 我试过了sort by也order但我收到此错误 contact prof
  • 使用 Ajax 将 JSON 发送到 WCF 3.5

    我在将 JSON 传递给 Weight 方法时遇到问题 我不断得到HTTP 1 1 415 Cannot process the message because the content type application x www form
  • 将照片上传到 Google Photos API 不返回上传令牌

    我正在使用 2018 版 Google Photos API 来上传图像和媒体 如下所述 上传字节 https developers google com photos library guides upload media uploadi
  • 嵌入式 Windows XP 中的网络接口设置

    给定设备描述 即出现在 设备属性 gt 连接使用 文本框中的字符串 我们如何获取网络接口名称 即出现在 网络连接 对话框中的名称 我们必须使用纯 C C 语言 或者通过一些标准命令行工具 例如 netsh ipconfig 或者两者的组合来
  • 数字中的下划线是什么意思? [复制]

    这个问题在这里已经有答案了 我想知道为什么以下变量被视为数字 a 1 000 000 print a 1000000 不应该print a return 1 000 000 使用 Python 3 6 以及PEP 515 https www
  • AspNetCore 抽象无法加载

    I use 适用于 Visual Studio 的 ASP NET Core Angular 2 模板 http blog stevensanderson com 2016 10 04 angular2 template for visua
  • 从 User.rb 模型访问 ApplicationHelper

    这是一些不起作用的简单代码 module ApplicationHelper def industries industries Agriculture Food etc end end class User lt ActiveRecord
  • Oracle Apex - REST 数据源 - 嵌套 JSON 数组 - 触发两个表 - 删除函数错误 ORA-04091

    这个问题是另一个问题的后续所以问题 https stackoverflow com questions 75219903 oracle apex rest data source nested json array trigger two
  • '类型'从不'上不存在属性

    这类似于 40796374 https stackoverflow com questions 40796374 property x does not exist on type never但这是关于类型的 而我正在使用接口 给出下面的代
  • 使用 LifecycleObserver 的生命周期感知组件如何感知屏幕方向的变化

    制作生命周期感知组件非常简单LifecycleObserver例如暂停和停止MediaPlayer当用户离开屏幕时 但有什么办法让我知道生命周期是否正在经历onPause onStop等等只是因为配置发生了变化 在这种情况下 我不会对Med
  • 较大数的非不同质因数

    我编写并使用这个函数来生成数字的质因数 import numpy as np from math import sqrt def primesfrom3to n Returns a array of primes p lt n assert