龙空技术网

「答案」python每日一题20201108

编程皮皮糖 93

前言:

现在兄弟们对“用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)

运行结果:

可见,这个效率提升是显而易见的。

标签: #用python求1000以内的素数之和 #python输出1000以内的素数和他们的和