前言:
现在兄弟们对“用python求1000以内的素数之和”大致比较注意,咱们都需要学习一些“用python求1000以内的素数之和”的相关文章。那么小编在网上汇集了一些关于“用python求1000以内的素数之和””的相关知识,希望姐妹们能喜欢,我们快快来学习一下吧!质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。用python输出1000以内的所有质数。
#####方法一#####def isPrime(n): if n <=1: return False for k in range(2,round(n**0.5)+1): if n%k==0: return False return Truefor i in range(2,1001): if isPrime(i): print(i,end=",")
【评析】
这是常规解法,定义一个质数判断函数,用每一个待检测数除以从2到该数的平方根区间内的数,如果发现存在余数为0情况则断定该数不是质数。
#####方法二#####print([i for i in range(2,1001) if 0 not in [i%n for n in range(2,round(i**0.5)+1)] ])
【评析】
如果看过昨天的题目评析,应该对这个形式并不陌生。这就是用for生成一个数列并自动赋值,当然这个还带了一个if的异形表达。
在这里我放上第二解法的目的倒不是为了显得很酷,实际是我要指出在python中直接生成列表,然后一起打印输出,比判断一个输出一个效率要高很多(执行了很多次print)。因为涉及外设的输入和输出都是有开销的,能合并进行的就要合并进行,这个在实际应用时还是要注意。
下面是我对这两个例子做了修改,以便于打印输出不同方法执行的时间。
#####方法一#####from datetime import datetimett=datetime.now()#=================def isPrime(n): if n <=1: return False for k in range(2,round(n**0.5)+1): if n%k==0: return False return Truefor i in range(2,1001): if isPrime(i): print(i,end=",")#=================print()print (datetime.now()-tt)#####方法二#####tt=datetime.now()#=================print([i for i in range(2,1001) if 0 not in [i%n for n in range(2,round(i**0.5)+1)] ])#=================print()print (datetime.now()-tt)
结果如下:
没有对比就没有伤害,效率相差实在巨大。
进而如果我们对方法一进行修改,把所有判断出的质数加入列表,最后一次性输出,情况会有改观吗?
#####方法一修改#####from datetime import datetimett=datetime.now()#=================pp=[]def isPrime(n): if n <=1: return False for x in range(2,round(n**0.5)+1): if n%x==0: return False pp.append(n)#添加到列表中 return Truefor i in range(2,1001): isPrime(i)print(pp)#只输出一次#=================print()print (datetime.now()-tt)
运行结果:
可见,这个效率提升是显而易见的。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。