首页 > 编程语言 >Python中查找质因数

Python中查找质因数

时间:2023-09-02 16:13:29浏览次数:50  
标签:数字 Python 质数 素数 lst 查找 质因数 primefac

如何在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]

标签:数字,Python,质数,素数,lst,查找,质因数,primefac
From: https://www.cnblogs.com/python1111/p/17673786.html

相关文章

  • Python中匹配模糊的字符串
    如何使用thefuzz库,它允许我们在python中进行模糊字符串匹配。此外,我们将学习如何使用process模块,该模块允许我们在模糊字符串逻辑的帮助下有效地匹配或提取字符串。使用thefuzz模块来匹配模糊字符串这个库在旧版本中有一个有趣的名字,因为它有一个特定的名字,这个名字被重新命......
  • 在Python中-datetime日期时间对象-日期时间字符串-时间戳之间的转换
    在python编程语言中的datetime模块,常用于对日期时间的处理,包括最常用到的日期时间格式,时间戳的转换,还有日期时间的计算今天笔者,主要讲一下,关于,日期时间对象-日期时间字符串-时间戳之间的转换首先在前面先整理几个知识点(1)、关于三者的转换,日期时间字符串与时间戳数字,是不能......
  • python基础语法之字符串
    字符串扩展1、字符串的三种定义方式单引号,双引号,三引号a='abc';b="sdf";c='''ewrc''';print(a,b,c);2、字符串的拼接#字符串字面量之间的拼接print("我是一名"+"大学生"+","+"学习智能医学工程");#字符串字面量和字符串变量的拼接name='......
  • 如何在CMAKE中指定python路径——使用cmake为python编译扩展模块时指定python路径
     答案:cmake-DPython3_EXECUTABLE=/path/to/bin/python3   =================================================    参考:https://stackoverflow.com/questions/49908989/cmake-cant-find-python3   =================================== ......
  • Python初级学习20230902——字符串
    字符串"""example05-字符串1.转义问题2.字符编码Author:danlisDate:2023/9/2"""a='hello,world'#和a一样的b="hello,world"#一般长字符串,用三个单引号。三个双引号一般作为注释c='''hello,world'''#......
  • Python进制转换以及ASCII码的转换
    获取ASCII码以及根据ASCII码获取内容#获取字符的编码为98#c的ASCII码为99print(ord('c'))#chr()根据编获取对应的值print(chr(99))进制的转换#hex函数十进制转十六进制print(f'99的十六进制{hex(99)}')#oct函数十进制转八进制print(f'99的八进制{oct(99)}')#......
  • Python初级学习20230902——元组
    """example04-初步学习Python1.学习元组tuple2.元组的应用Author:danlisDate:2023/9/2"""#START1学习元组tuple#元组是不可变的容器*#str=(100)#这实际上class'int',所以如果需要构造一元组,必须后面加,str=(100,)str1=(100,)print(type(str1))#重复......
  • python 将xml文件格式化处理
    importosfromlxmlimportetree'''将不规范的xml文件规范化'''path=r"~/path"fordirs,root,filenamesinos.walk(path):forfilenameinfilenames:path_file=os.path.join(path,dirs,filename)ifnotst......
  • Python初级学习20230901
    Python初级学习20230901运算符--->优先级和结合性左结合:从左往右进行计算(大部分运算符)右结合:从右往左进行计算(赋值运算符,正负号,索引和切片)assert断言语句a=1asserta==1#后面可以不加asserta==1,'这里写的是如果出错时的提示语句,AssertionError:内容'容器型数......
  • python flask 提供web的get/post开发
    转载请注明出处:使用pythonflask框架编写webapi中的get与post接口,代码编写与调试示例如下:fromflaskimportFlask,request,jsonifyapp=Flask(__name__)@app.route('/api/get',methods=['GET'])defhandle_get_request():try:#解析URL参数......