【发布时间】:2014-12-06 20:40:28
【问题描述】:
我最近用 Python 编写了一段代码,它接受用户输入的数字“n”并打印出该数字的质因数,包括重复质数。我非常兴奋,因为我已经为此工作了一段时间,但实际上它并没有那么好。任何大于 500,000 的 n 都需要很长时间才能计算出来,我想知道是否有任何方法可以优化它。
import sys
def is_prime(n):
if n < 2:
return False
if n == 2:
return True
if not n & 1:
return False
for x in range(3,int(n**0.5)+1,2):
if n % x == 0:
return False
return True
def factors(n):
n = int(n)
factors = []
test_numbers = []
if is_prime(n) == True:
print "%s is prime!" % n
else:
for a in range(1,n+1):
if is_prime(a) == True:
test_numbers.append(a)
while int(len(test_numbers)) > 0:
mx = int(max(test_numbers))
while n % mx == 0:
n = n/mx
factors.append(mx)
else:
test_numbers.remove(mx)
print factors
n = raw_input("What number would you like to factorize? ")
factors(n)
print
thing = raw_input("Press ENTER to continue.")
sys.exit()
【问题讨论】:
-
因式分解是现代密码安全所依赖的最困难的问题。查看此stackoverflow.com/questions/2267146/… 以获得更多详细答案
-
@SainathMotlakunta:我以为那是在求解离散对数。
标签: python optimization factorization