Prime factorisation program in python gives no output
我正在研究Euler问题3的项目,
The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 600851475143 ?
号
我提出的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | def q_prime(a): if a == 2: return True elif a < 2: return False for i in range(2,a): if a%i == 0: return False else: return True def prime_factor(x): prime_factors =[] for i in range(1,x): if q_prime(i) == True and x%i == 0: prime_factors.append(i) return prime_factors |
调用13195函数,我得到了预期的[5,7,13,29]。我尝试了一些其他的组合,比如1035,它给出了[3,5,23]。但是,当我在600851475143上调用这个函数时,我没有得到输出。此外,我也没有收到错误消息。它运行一段时间,然后简单地重新启动shell
我知道这不是一个优雅的代码,而且我猜暴力迫使我通过这样一个问题为大量的是导致这个问题?到底发生了什么?
考虑到问题的大小,您编写的两个函数都有问题。
更好的方法(O(√N)->基本上是直接结果:
- 利用生成质数的埃拉托森筛生成函数
- 循环遍历素数,直到
sqrt(n) 收集因子,同时收缩n ,找到每个因子。- 如果没有其他因素
号码600851475143太大。如果在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import math def q_prime(a): if a == 2: return True elif a < 2: return False for i in range(2, int(math.sqrt(a) + 1)): if a%i == 0: return False else: return True def prime_factor(x): prime_factors =[] for i in range(1, int(math.sqrt(x) + 1)): if q_prime(i) == True and x%i == 0: prime_factors.append(i) return prime_factors |
号
下面是我尝试使用python 2.7运行代码时发生的情况:
1 2 | $ python primes.py Killed: 9 |
问题是,
您可以尝试用
另外,代码中还有一个bug,这意味着它不适用于主输入。