• 在 Python 中查找素因数


    本篇文章将介绍如何在 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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    输出:

    [2, 2, 5]
    
    • 1

    在上面的示例中,我们返回了 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))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    输出:

    [2, 2, 5]
    
    • 1

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

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


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

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

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

    请参阅下面的代码:

    import primefac
    print(list(primefac.primefac(20)))
    
    • 1
    • 2

    输出:

    [2, 2, 5]
    
    • 1
  • 相关阅读:
    22-09-19 西安 谷粒商城(03)分布式锁、ab测试、LUA脚本、看门狗自动续期
    树和二叉树的概念与使用(Tree&Binary Tree)
    MotoGP Ignition:准备好参加 Spotlight 活动!
    蓝皮书首发!车载毫米波雷达赛道进入「大变革周期」,技术/产品/市场并行升级
    python 第四章面向对象
    一个奇怪的蓝牙模块分析记录
    mp3stego(mp3隐写工具)使用手册
    挠场的科学丨四、穿梭阴阳的挠场——道家风水、八卦、布阵的解密
    华为云Astro的前世今生:用7年时间革新低代码开发观念
    MQTT协议是什么?快速了解MQTT协议在物联网中的应用
  • 原文地址:https://blog.csdn.net/fengqianlang/article/details/133863360