基于python的分解质因数算法

基于python的分解质因数的算法实现


今天在准备复试的时候突发奇想,如果老师要求写一个基于分解质因数的算法怎么办,于是我对算法的实现做出了思考,大致分为一下三部分

  1. 实现质数检测
  2. 实现迭代器
  3. 实现错误过滤

首先我们要知道一个定律,任何数字的质因数是一定的,不存在第二个。由此我利用for循环制作了一个从小到大依次遍历的暴力分解算法。理论时间复杂度是O(n^2)。

以下是完整的算法,先贴出来(嘻嘻):

def check_pr(num):
    for i in range(2, num):
        if num % i == 0:
            return False

def decompose_prime(num):  # 递归分解质数
    for i in range(2, num):
        if num % i == 0:
            print(i, end="*")
            if num // i is 2:   # 因为range(2,2)是违法的,不被执行,所以需要判断。
                print(2, end="*")
            elif check_pr(num // i) is not False:   # 此处需要判断后面的数字是否为质数,是的话直接输出
                print(num // i, end="")
            else:
                decompose_prime(num // i)
            break

 # 调用
print("1000"+"=", end="")
decompose_prime(1000)

我大致说一下代码:
第一个check_pr函数是检查num是否为质数的。在decompose_prime函数中的elif有使用到,在这里和num // i is 2一样是起到了过滤器的作用,不过check_pr函数的作用是检查每一次迭代前输入数据是否为质数的,是质数就直接输出,而num // i is 2的设立是因为当输入值为2时,range(2,2)会触犯语法错误,发生违规,python会拒绝执行后面的代码。这就是本算法的两个过滤器了。
而后就是decompose_prime算法的迭代 ( 有和我一样的萌新可能还不清楚递归和迭代的区别,递归可以理解是函数的传入数值不变,一直自我调用,而迭代则是函数传入值变化的调用自己),迭代的传入数据就是将num除去已经得到的质因数的部分传给迭代函数本身。

至此函数书写完成。新手勿喷(嘻嘻)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值