我对python很陌生,我想我会创建一个返回给定数字的主要因子的程序。这是我的代码:总理分解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的质量?我正在笔记本电脑上运行程序。
因式分解大数是难题。这是非常困难的,流行的密码算法是围绕它建立的。所以不要指望你的天真计划能够有效地解决这个问题。 – 2015-02-07 13:09:33
您可能想用“if isprime(a)”替换“if isprime(a)== True” - Python在while循环中每次迭代都会调用functools库中的reduce函数,这可能会花费很长时间很长一段时间,所以你可能想用更快的东西替换它 - 还要检查是否有无限循环通过在代码中放置打印语句 - 将while循环中的for循环更改为列表理解,这应该使代码更加快速更可读,祝你好运 – 2015-02-07 13:20:38