当前位置: 首页 > 面试题库 >

素数分解-列表

李宁
2023-03-14
问题内容

我正在尝试实现一个函数primeFac(),该函数将正整数作为输入n并返回包含的素数分解中所有数字的列表n

我已经走了这么远,但我认为最好在这里使用递归,不确定如何在这里创建递归代码,基本情况是什么?首先。

我的代码:

def primes(n):
    primfac = []
    d = 2
    while (n > 1):
         if n%d==0:
             primfac.append(d)
    # how do I continue from here... ?

问题答案:

一个简单的审判部门:

def primes(n):
    primfac = []
    d = 2
    while d*d <= n:
        while (n % d) == 0:
            primfac.append(d)  # supposing you want multiple factors repeated
            n //= d
        d += 1
    if n > 1:
       primfac.append(n)
    return primfac

具有O(sqrt(n))复杂性(最坏的情况)。您可以通过特殊情况2并仅在奇数上循环d(或特殊情况下将更多小质数并在可能的除数上循环)来轻松改进它。



 类似资料:
  • 问题内容: 我正在研究用Java实现的素数分解程序。目的是找到最大的素因600851475143(项目Euler问题3)。我想我已经完成了大部分工作,但是却遇到了一些错误。而且我的逻辑似乎不对,特别是我为检查数字是否为质数而设置的方法。 编辑 问题答案: 为什么要这么复杂?您 不需要 像 isPrime() 这样的事情。除以最小除数(素数),然后从素数开始循环。这是我的简单代码:

  • 问题内容: 我想找到小于10 ^ 12的大数的质分解。我得到了以下代码(在Java中): 首先,上述算法的复杂性是什么?我很难找到它。 而且对于大量的素数来说太慢了。 有没有更好的算法,否则如何优化这种算法? 问题答案: 如果您想分解 许多 大数,那么最好先找到质数最大(例如使用Eratosthenes的Sieve)。然后,您只需要检查那些质数是否是因数,而不是全部测试。

  • 我已经在Stack上看到了这个问题,但是我找不到任何具体的答案,或者至少我能理解的答案。所以这是我的问题: 如何并行化一个大数的因式分解? 我见过这样的回答:“…他只需要为找到的每个因素生成一个新线程,然后用某种同步对象来收集所有的因素” 但是我不太明白这是怎么做到的。有人能用例子解释一下吗?

  • 问题内容: 我记得我曾经见过一个能够分解python中的列表的运算符。 例如 通过应用该运算符,您将获得 该操作员是什么,将不胜感激。 问题答案: 如果要将参数列表传递给函数,可以使用splat运算符。运作方式如下: 如果要将列表的内容分配给变量,则可以列出解压缩列表:

  • 问题内容: 假设列表中没有连续的整数。 我已经尝试过使用NumPy()来解决每个元素之间的差异,但是还无法使用它来获得答案。下面是输入(第一行)和预期输出(第二行)的两个示例。 问题答案: 您可以用来对列表中的顺序元素对启用迭代,并跟踪序列未增加的索引值,以便将相应的切片附加到输出列表中。

  • 接口说明 查询素材(分页查询素材列表) 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /wish3dearth/api/material/v1.0.0/pageList 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN title string