素数因子化

时间:2016-09-21 21:15:57

标签: python python-3.x prime-factoring

所以我的程序应该找到一个整数的素因子,然后打印出整数数组的内容,并且数组中的值应该相乘(给你原始数字) 这就是它应该是什么样子

Prime Factorization Program

Enter an integer > 1: 210 

Prime Factors 
2
3
5
7
Check Product = 210

这是我的代码和我的结果

def main():
    a = [0]*20
    print("Prime Factorization Program")
    print()
    num = eval(input("Enter an integer > 1: "))
    count = 0
    for k in range(1,num):
        if num % k == 0:
            a[count]= k
            count = count + 1

    mySum = 0
    for k in range(count):
        mySum = mySum + a[k]
    print()
    print("Prime Factors")
    for k in range(count):
        print(a[k])
    print("Check Product =",mySum)

main()

这是我的结果

Prime Factorization Program

Enter an integer > 1: 210

Prime Factors
1
2
3
5
6
7
10
14
15
21
30
35
42
70
105
Check Product = 366

2 个答案:

答案 0 :(得分:1)

  1. 问题 - 如果 f 是一个因素,您不希望计算 f 的倍数。
    解决方案 - 确定因素 f 后,将 n 除以 f
    示例 - 210可被2整除;除以2然后处理105.这确保您不再计算2的倍数,如6或10. 105可被3整除;除以3并继续35。

  2. 问题 - 素数因子可以多次显示。 12 = 2×2×3 解决方案 - 如果 f 是一个因素,请继续检查它并除以 f ,直到您考虑到所有事件为止。
    示例 - 12可被2整除;除以2得到6. 6仍可被2整除;再次除以2得到3. 3不能被2整除;继续下一个因素。

答案 1 :(得分:0)

因为您的代码正在打印所有因素而不仅仅是素因子。下面是您可以参考素数分解的样本函数:

def prime_factors(n):
    prim_facs = []
    d = 2
    while d*d <= n:
        while (n % d) == 0:
            prim_facs.append(d)
            n //= d
        d += 1
    if n > 1:
       prim_facs.append(n)
    return prim_facs

# Sample Example
# >>> prime_factors(210)
# [2, 3, 5, 7]