迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 中查找素因数

作者:迹忆客 最近更新:2023/06/27 浏览次数:

本篇文章将介绍如何在 Python 中执行素因数分解。


质因数分解概述

在数学中,数字的因子是那些可以除以给定数字且余数为零的数字。

素数是唯一的数字,只有两个因子,一和数字本身。 此类数字的一些示例包括 3、7、11、13 等。

质因数分解是指找出所有相乘构成原始数字的质数。 我们可以考虑数字 6 的一个简单例子。

该数的质因数分解产生两个因数:2 和 3。


在 Python 中查找质因数的不同方法

我们可以通过多种方式找到指定数字的质因数。 本文将演示下面列出的三种方法:

  • 创建自定义函数
  • 使用埃拉托斯特尼筛法
  • 使用 primefac 模块

让我们从在 Python 中创建自定义函数开始。

执行质因数分解的自定义函数

在数学中,最基本的质因数分解方法是重复除法。 我们反复将数字除以素数。 我们可以在 Python 中使用嵌套循环来实现这一点。

第一个循环确定一个数字是否是素数。 第二个循环将该素数与给定数相除。

如果余数为零,我们将质数附加到列表中。 该函数返回最终列表。 请参阅下面的代码。

def p_factorization(n):
    i = 2
    lst = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            lst.append(i)
    if n > 1:
        lst.append(n)
    return lst

print(p_factorization(20))

输出:

[2, 2, 5]

在上面的示例中,我们返回了 20 的质因数分解。 // 除法运算符确保返回的余数是整数。

使用埃拉托斯特尼筛法进行素因数分解

埃拉托斯特尼筛法算法返回低于给定数字的所有素数。

它标记小于给定数字的值,并且可除以素数的平方以返回所有小于给定数字的素数。

我们可以用它在 Python 中执行素因数分解。 首先,我们找到所需数字以下的质数,然后将它们除以给定的数字以查看其质因数分解。

请参阅以下代码围栏示例:

def sieve_of_erast(number):
    maximum = number+1
    d = dict()
    for i in range(2, maximum): d[i] = True

    for i in d:
        factors = range(i,maximum, i)
        for f in factors[1:]:
            d[f] = False
    lst = [i for i in d if d[i]==True]
    return lst

def p_factorization(number):
    x = number
    res = []
    lst = sieve_of_erast(number)
    i = 0
    while(i < len(lst)):
        if(x%lst[i]==0):
            x = x//lst[i]
            res.append(lst[i])
            i = 0
            if(x == 1):
                break
        else:
            i = i +1
    return res


print(p_factorization(20))

输出:

[2, 2, 5]

在上面的代码示例中,我们首先创建一个实现埃拉托色尼筛法的函数,以查找 20 以下的素数。

然后我们创建另一个函数,使用这个素数列表来返回其素数分解。


使用 primefac 模块执行素因子分解

primefac 模块用于执行有关素数的计算。 它可以有效地处理大量计算。

我们可以使用该模块的 primefac() 函数进行素数分解。 它返回可以使用列表构造函数转换为列表的生成器对象。

请参阅下面的代码:

import primefac
print(list(primefac.primefac(20)))

输出:

[2, 2, 5]

上一篇:在 Python 中从 URL 中提取域

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中从 URL 中提取域

发布时间:2023/06/27 浏览次数:86 分类:Python

本文将通过实际例子来讲解Python的 urlparse() 函数从URL中解析并提取域名。 我们还将讨论提高解析 URL 和使用其不同组件的能力。使用 urlparse() 从 URL 中提取域

Python 中的省略号对象

发布时间:2023/06/27 浏览次数:158 分类:Python

本篇文章将介绍 Python 中省略号对象的使用。使用省略号作为未编写代码的占位符 省略号对象可以以不同的方式使用。 它主要充当未编写代码的占位符。

实现 Python Builder 模式的不同方法

发布时间:2023/06/27 浏览次数:70 分类:Python

构建器模式是一种允许对象的创建与其表示分离的模式。 这种模式可以创建和配置复杂的对象而无需继承,这是一种强大但不灵活的方法。

Python 中的互相关

发布时间:2023/06/27 浏览次数:81 分类:Python

互相关是一种重要的信号处理方法,用于分析具有不同滞后的两个信号之间的相似性。 您不仅可以了解两个信号的匹配程度,还可以获得它们最相似的时间点或索引。本文将讨论在 Python 中处理

使用 Python Timedelta 月份计算日期

发布时间:2023/06/27 浏览次数:128 分类:Python

在本篇文章中,我们将通过 timedelta 学习如何在 Python 中使用日期时间。 我们将了解如何计算当前日期或任何其他日期六个月后的日期。

Python MRO(方法解析顺序)

发布时间:2023/06/27 浏览次数:182 分类:Python

多重继承意味着单个子类可以继承多个类,并且子类将被授权访问属性和函数,除非它们不是该特定类的私有属性和函数。 MRO 技术用于搜索正在执行的类的顺序。在这篇文章中,我们将学习

Python 获取主目录

发布时间:2023/06/27 浏览次数:146 分类:Python

本篇文章将介绍使用 Python 中的 os.path.expanduser 或 pathlib 库获取主目录的路径。使用 Python 中的 os.path.expanduser 模块获取主目录

逐行分析 Python 代码

发布时间:2023/06/26 浏览次数:115 分类:Python

本文介绍了如何逐行分析 Python 代码并获取有关代码执行的有用信息。首先,我们简单介绍一下profiling; 然后,我们将讨论何时使用逐行分析比使用函数基础分析更好。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便