python 素因子分解

在使用python解决问题之前,我们先说一下,什么是素因子分解

所谓素因子分解就是,先找这个数的所有约数(约数即:a%b == 0,也就是a可以被b整除)

例如:20的约数集合为 [1, 2, 5, 10, 20]

那么素因子分解呢?

就是从最小的素数约数开始除,也就是这个除数要满足两个条件,一是约数,二是素数

那么这里20的最小的素约数是2,所以我们从2开始除,并且一直除到不能被整出为止:

num = 20

num = num / 2

num = 10(这里num依旧可以被2整除,所以再来一次)

num = num / 2

num = 5 (num很明显除以2不能整除)

所以接下来被除数需要向后走,即5(再取下一个数为除数之前,要先判断是否为素数,这里5为素数,如果不是素数比如4则需要继续向后取)

num = num / 5

num = 1

至此,运算结束。所以,我们得到20的素因子集合为:[2, 2, 5]

 

那么接下来就是使用python实现的部分了

通过之前的解析过程,我们可以看到我们需要这么两个小模块:

1. 判断数字是否是素数,如果数字本身是素数,那么直接返回1和它本身就可以了,因为素数不能被分解了,即 [1, num]

2. 我们需要获得这个数的所有约数,以便于我们进行作除法

下面是这两个部分的实现:

1 # 判断是否是素数
2 def isprime(num):
3     count = num / 2
4     while count > 1:
5         if num % count == 0:
6             return False
7         count -= 1
8     else:
9         return True
1 # 得到所有的约数
2 def getfactors(num):
3     return [x for x in range(1, num) if num % x == 0]

通过上面两个部分,我们就可以得到所有的基础了,接下来就是运算了

 1 def primefactor(num):
 2     if isprime(num):
 3         return [1,num]
 4     factors = getfactors(num)
 5     retList = []
 6     consult = num
 7     for i in range(1,len(factors)):
 8         if consult == 1:
 9             break
10         while True:
11             if consult % factors[i] != 0:
12                 break
13             if isprime(factors[i]):
14                 consult /= factors[i]
15                 retList.append(factors[i])
16             else:
17                 break
18     return retList

ok,最后调用primefactor就可以得到结果了,注意返回的是个list对象哦

 

转载于:https://www.cnblogs.com/loveyangaddddd/p/7082803.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值