【发布时间】:2015-02-07 13:04:28
【问题描述】:
我对 python 很陌生,我想我会创建一个程序来返回给定数字的质因数。这是我的代码:
import math
import operator
import functools
def isprime (n):
if n == 1:
return False
elif n == 2:
return True
else:
for x in range (2, int(math.sqrt(n))+1):
if n % x == 0:
return False
break
else:
return True
def factors (a):
factorlist = []
if isprime(a) == True:
print "The number is a prime."
else:
while functools.reduce(operator.mul, factorlist, 1) != a:
for x in range (1, a):
if a % x == 0:
if isprime(x) == True:
factorlist.append(x)
factorlist.sort()
print factorlist
testnumber = int(input("Enter a number."))
factors(testnumber)
我的问题是,根据数量,需要很长时间。它可以立即解决 100 或 1000,但 2000 或 864 根本不起作用!我让它以 864 作为我的输入运行了 45 分钟,但它没有打印任何内容。是不是跟我的 CPU 质量有关系?我正在笔记本电脑上运行程序。
【问题讨论】:
-
因式分解大数是一个难题。很难围绕它构建流行的密码算法。所以不要指望你的幼稚程序能有效地解决这个问题。
-
您可能希望将“if isprime(a) == True”替换为“if isprime(a)” - Python 在每次迭代时调用 functools 库中的 reduce 函数循环,这可能需要很长时间,因此您可能想用更快的东西替换它 - 还要通过在代码中放置打印语句来检查是否存在无限循环 - 将 while 循环中的 for 循环更改为列表理解,那应该让代码更快、更易读,祝你好运
标签: python primes prime-factoring