如何使用Python库生成整数的所有因数并输出升序列表?
从sympy.factorint结果生成整数的所有因数升序列表
使用sympy.factorint()能获取整数的质因数分解字典,比如对567执行:
import sympy sympy.factorint(567)
返回结果为:
{3: 4, 7: 1}
若需要将该整数的所有因数以升序列表形式输出(期望结果:[1, 3, 7, 9, 21, 27, 63, 81, 189, 567]),可通过以下方法实现:
解决方案代码
import sympy from itertools import product def get_all_factors(n): factor_dict = sympy.factorint(n) # 生成每个质因数的所有幂次(含0次幂) prime_power_groups = [] for prime, exponent in factor_dict.items(): prime_power_groups.append([prime**i for i in range(exponent + 1)]) # 计算所有幂次组合的乘积并排序 all_factors = sorted([prod(comb) for comb in product(*prime_power_groups)]) return all_factors # 测试示例 print(get_all_factors(567))
代码说明
- 调用
sympy.factorint(n)获取目标整数的质因数分解字典; - 对每个质因数,生成从0次幂(即1)到其最高次幂的所有数值;
- 用
itertools.product生成这些幂次列表的笛卡尔积,每个组合对应一个因数; - 计算每个组合的乘积,最后排序得到升序的因数列表。
内容的提问来源于stack exchange,提问作者ishandutta2007
相关产品推荐
相关产品推荐

