python正整数分解质因数,10行代码搞定, 低于线性时间复杂度O(n),并从小到大输出(python正整数分解质因数,python分解质因数)

python “随机整数分解质因子”写法

普通思路都是先求出1到该正整数区间内的质数,然后通过遍历循环的方式依次求解。但本文提供另一种思路,充分利用了质数的特性,代码复杂度低,时间复杂度低。代码如下:

aa = input("输入一个整数")
aa = int(aa)
b = 2     # 起始质数为最小质数
xx = []

while True:
    if aa % b != 0:
        b += 1
    else:
        aa = aa // b
        xx.append(b)
    if aa == 1:
        break
print(xx)
输入一个整数450
[2, 3, 3, 5, 5]			#输出

在这里插入图片描述
引用一下这位博主发布的“分解质因子”的文章,各位可以进行下对比–>这是个超链接

解释

这里利用了质数的特性,我总结的结果是:一个大于1的正整数,一定会比小于或等于该数的质数分解;且当该数被最小质数分解后,继续分解剩余的数,则剩余的数一定不会被分解过的质数再次分解;且被最小质数分解后的数,在遇到“下一个被分解的质数”之前,一定不会被非质数的正整除分解。

这里的“下一个被分解的质数”是指比上一个被分解的质数大且比下一个被分解的质数小的质数,如果是最后被分解的质数,则比上一个被分解的质数大即可;一定不会被非质数的正整数分解是指:一定不会被被分解的两个质数之间的任何非质数的正整数分解,举个例子:

假设需要分解的数是26,分解质因数的结果是(2, 13), 那么他一定不会被2-13之间的非质数的正整数分解

进阶版

def prime_factors(n):
    factors = []
    
    # 首先处理2的因数
    while n % 2 == 0:
        factors.append(2)
        n = n // 2
    
    # 处理奇数因数,从3开始,每次增加2
    i = 3
    while i * i <= n:
        while n % i == 0:
            factors.append(i)
            n = n // i
        i += 2
    
    # 如果n仍然大于2,那么它本身是一个质数
    if n > 2:
        factors.append(n)
    
    return factors

# 示例用法
n = 56
print(f"{n}的质因数是: {prime_factors(n)}")

解释:
处理2的因数:首先,我们处理所有的2的因数,因为2是唯一的偶数质数。

处理奇数因数:然后,我们从3开始,每次增加2(跳过偶数),检查是否是n的因数。

最后的质数:如果最后n仍然大于2,那么它本身是一个质数,直接加入到因数列表中。

时间复杂度:
这个算法的时间复杂度是O(sqrt(n)),因为我们在最坏情况下只需要检查到sqrt(n)的所有可能的质因数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值