使用python分解质因数
使用python分解质因数
AiY0u每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数,也叫做分解质因子。
使用python进行质因数分解可以利用Sympy库
Sympy库的下载安装
如果未下载Sympy库,可以在终端中输入
1 | pip install sympy |
factorint函数分解质因数
1 | from sympy import factorint |
输出的结果为:
1 | 对k质因数分解的结果为 {2: 4, 3: 2, 5: 2, 7: 8, 13: 2, 31: 2, 43: 2, 109: 2, 239: 2, 691: 2, 8521: 2, mpz(1697946359): 2, 29429628701749048733: 2} |
观察到输出若干 a:b的结构,该结构代表k的质因数中有b个a
即k = 2⁴ * 3² * 5² * 7⁸ * 13² * …… * 29429628701749048733²
分解结果转化为列表
很多时候我们还需要对分解得到的质因数进行其他操作,可能需要将字典转化为列表
可以通过如下操作
1 | factor_list = [p for p, exp in factors.items() for _ in range(exp)]#列表推导式,表示将字典p:exp中的p重复exp次 |
把这两行加在原代码后面,得到结果
1 | 展开后的质因数列表为: [2, 2, 2, 2, 3, 3, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 13, 13, 31, 31, 43, 43, 109, 109, 239, 239, 691, 691, 8521, 8521, mpz(1697946359), mpz(1697946359), 29429628701749048733, 29429628701749048733] |
注:出现mpz类型是因为sympy在处理大整数时使用了多精度库,mpz类型比int更加精确,出现mpz一般不会影响我们操作。