我正在写一些代码,应该找到素数的因式分解。主函数通过数字递增;我这样做是因为我想使用代码进行计时实验。我不介意它不是超级高效的,对我来说项目的一部分就是让它更高效。它还没有完全完成(例如,它没有简化素数分解)。我已经测试了除主函数之外的所有函数,它们都工作过,所以这些函数没有问题。
我的代码是
import math
import time
primfac=[]
def primes(n):
sieve = [True] * n
for i in xrange(3,int(n**0.5)+1,2):
if sieve[i]:
sieve[i*i::2*i]=[False]*((n-i*i-1)/(2*i)+1)
return [2] + [i for i in xrange(3,n,2) if sieve[i]]
def factfind(lsp,n): #finds factors of n among primes
for i in lsp:
if n%i==0:
primfac.append(i)
else:
i+=1
def primfacfind(n1,n2):
while n1 < n2:
n = n1
time_start = time.clock()
factfind(primes(n),n)
print primfac
time_elapsed = time.clock() - time_start
print "time:", time_elapsed
primfac.clear()
n1+=1
print primfacfind(6,15)
运行它会得到输出
[2, 3]
time: 7.5e-05
Traceback (most recent call last):
File "python", line 43, in <module>
File "python", line 39, in primfacfind
AttributeError: 'list' object has no attribute 'clear'
我也不确定到底怎么了。它给出了素数分解的正确数字,并打印了时间,但似乎无法清除列表。注释掉这行primfac.clear()
就可以了。
任何帮助都将不胜感激。谢谢!
Python 3.3中添加了
list.clear()
方法。在早期版本中,可以通过del primfac[:]
来实现等效。Python的
list
在Python 3.x之前没有clear
方法。您的代码在Python 2.x或更早版本中无法工作。可以创建新列表,也可以删除旧列表的所有内容。相关问题 更多 >
编程相关推荐