Python练习题 035:Project Euler 007:第10001个素数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python练习题 035:Project Euler 007:第10001个素数相关的知识,希望对你有一定的参考价值。
本题来自 Project Euler 第7题:https://projecteuler.net/problem=7
# Project Euler: Problem 7: 10001st prime # By listing the first six prime numbers: # 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. # What is the 10 001st prime number? # Answer: 104743 import time def f(x): #判断 x 是否为素数,返回bool值 if x == 2: return True elif x <= 1: return False else: t = False #判断是否能够整除 for i in range(2, x//2): if x%i == 0: t = True break if t: #若能整除 return False else: return True startTime = time.clock() #计时开始 lst = [] #存放素数的列表 a = 1 #从数字 1 开始判断 while len(lst) < 10001: if f(a): lst.append(a) a += 1 endTime = time.clock() #计时结束 print(‘第10001个素数为%s‘ % lst[-1]) print(‘耗时%.2f秒‘ % (endTime-startTime)) #计算耗时
求解第 10001 个素数。
上述代码的思路其实挺简单:首先自定义一个函数,用来判断某个数字是否为素数。之后从数字1开始判断,只要是素数,就放进 lst 列表,直到 len(lst) = 10001 为止,此时 lst[-1] 即为所求之数字。
思路应该没啥问题,但就是太费时间,总共用了将近 1 分钟!看了 Project Euler 论坛里,有人贴出了代码,说只花了 1.34 秒,但我复制过来一试,也是将近 1 分钟的耗时。或许是因为俺的计算机太烂???
另外,在判断是否为素数时,我一般是取 range(2, x//2),但看 Project Euler 论坛里有的人是用 range(2, int(math.sqrt(x))+1),计算次数是比我的少一些,但是……靠谱吗?
以上是关于Python练习题 035:Project Euler 007:第10001个素数的主要内容,如果未能解决你的问题,请参考以下文章
Python3练习题 035:Project Euler 007:第10001个素数
69期-Java SE-035_MySQL-6 存储过程SQL练习 -doing
Python练习题 043:Project Euler 015:方格路径
Python练习题 047:Project Euler 020:阶乘结果各数字之和