Python中查找质因数

举报
python教程 发表于 2023/10/13 15:56:22 2023/10/13
【摘要】 如何在Python中进行素因式分解。 质因数分解的概述在数学中,一个数的因数是指那些可以除以给定数并留下零余数的数字。质数是只有两个因数的独特数字,一个和数字本身。这类数字的一些例子是3,7,11,13,等等。素数因数化是指找到所有乘以原数的素数。我们可以考虑一个简单的例子:数字6。这个数字的质因数分解产生了两个因子,即2和3。在Python中寻找质因数的不同方法我们可以用不同的方法找到指定...

如何在Python中进行素因式分解。

质因数分解的概述

在数学中,一个数的因数是指那些可以除以给定数并留下零余数的数字。

质数是只有两个因数的独特数字,一个和数字本身。这类数字的一些例子是3,7,11,13,等等。

素数因数化是指找到所有乘以原数的素数。我们可以考虑一个简单的例子:数字6。

这个数字的质因数分解产生了两个因子,即2和3。
在Python中寻找质因数的不同方法

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

  • 创建一个自定义函数
  • 使用Sieve of Eratosthenes
  • 使用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 的质因数。用于除法的// 算子确保返回的余数是一个整数。

Sieve of Eratosthenes 来进行质因式分解

Sieve of Eratosthenes 算法返回低于给定数字的所有质数。

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

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

请看下面的代码栅栏作为例子:

def sieve_of_erast(number):
    maximum = number+1
    d = dict() #Python小白学习交流群:711312441

    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]

在上面的代码例子中,我们首先创建一个函数,实现Sieve of Eratosthenes ,找到低于20 的素数。

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

primefac 模块来进行素数分解

primefac 模块是用来进行有关质数的计算的。它可以有效地处理大量的计算。

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

请看下面的代码:

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

输出:

[2, 2, 5]
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。