我感谢所有的回复,我编辑了我的问题和代码,以便他们更好地工作。抱歉以前不清楚。
我是python的新手,已经学习了基础知识,我现在正在上网,想知道为什么我在这里放置的第二个代码比第一个快得多。代码是为了得到一个构成数字的素数列表,我觉得这两个代码在时间上应该相似,但它们不是:
代码1)
def getprime(x):
j=[]
for i in range (2,x+1):
while x%i==0:
j.append(i)
x=x/i
return j
2)
def get_primes(n):
result = []
for i in range(2, n + 1):
s = 0
while n % i == 0:
n = n / i
s += 1
if s > 0:
for k in range(s):
result.append(i)
if n == 1:
return result
我使用的数字是95485200,我可以看到性能的巨大差异,在jupyter笔记本中用%% timeit确认较小的数字,我觉得奇怪,因为代码的前几行几乎相同。
感谢。
答案 0 :(得分:-2)
第一个代码检查数字是否可以被因子整除:
if x%i==0: ...
和
while x%i==0: ...
,第一段代码还会创建x的多个实例:x=x/i
。
更有效的代码是:
def prime(num):
if num == 1 or num == 0:
return False
prime = True
for i in range(2, num):
if num % i == 0:
prime = False
return prime