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 分钟的耗时。或许是因为俺的计算机太烂???
+++++++++++++++++++++++++++++++++++++++
【2016-10-30 更新】 在判断是否为素数时,我一般是取 range(2, x//2),但看 Project Euler 论坛里有的人是用 range(2, int(x**.5)+1),我试了下,发现基本可以把计算时间压缩到 1 秒钟之内,真是太方便了!更新代码如下:
# 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, int(x**.5)+1):
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
print('第10001个素数为%s' % lst[-1])
endTime = time.clock() #计时结束
print('耗时%.2f秒' % (endTime-startTime)) #计算耗时
其实,如果把 lst 的初始化改为 lst = [2],然后在判断是否为素数时,直接从 3 开始判断,且 a+= 2,似乎还能进一步压缩计算时间,但提升空间有限,所以……就不折腾了。
Python练习题 035:Project Euler 007:第10001个素数的更多相关文章
- Python练习题 008:打印101-200之间的所有素数
[Python练习题 008]判断101-200之间有多少个素数,并输出所有素数. ---------------------------------------------------------- ...
- Python3练习题 035:Project Euler 007:第10001个素数
import time def f(x): #判断 x 是否为素数,返回bool值 if x == 2: return True elif x <= 1: return False else: ...
- Python练习题 032:Project Euler 004:最大的回文积
本题来自 Project Euler 第4题:https://projecteuler.net/problem=4 # Project Euler: Problem 4: Largest palind ...
- Python练习题 029:Project Euler 001:3和5的倍数
开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...
- Python练习题 046:Project Euler 019:每月1日是星期天
本题来自 Project Euler 第19题:https://projecteuler.net/problem=19 ''' How many Sundays fell on the first o ...
- Python练习题 039:Project Euler 011:网格中4个数字的最大乘积
本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 # Project Euler: Problem 10: Largest pro ...
- Python练习题 033:Project Euler 005:最小公倍数
本题来自 Project Euler 第5题:https://projecteuler.net/problem=5 # Project Euler: Problem 5: Smallest multi ...
- Python练习题 049:Project Euler 022:姓名分值
本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...
- Python练习题 048:Project Euler 021:10000以内所有亲和数之和
本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...
随机推荐
- 解析WAV音频文件----》生成WAV音频文件头
前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i WAV音频文件介绍: WAV文件是在PC机平台上很常见的.最经典的多媒体音频文件,最早于1991年8月出现在Windows3.1操作系统 ...
- MarkDown编辑器中改变文本字体颜色大小
法一 有点类似前端里 <font face="微软雅黑" size=4 color=red>输入的文字</font> 其中 face对应字体 size 大小 ...
- json对象遍历顺序问题
对json对象遍历我们一般使用for in循环,或者Object.keys + 数组方法.在接触js以来听到过一种说法: for in 遍历顺序是不可靠的 但是在实际开发中for in 循环也是按照其 ...
- 【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...
- android studio生成aar包
android studio生成aar包并在其他工程引用aar包 http://blog.csdn.net/getchance/article/details/47257389 用Android st ...
- Mono集成中使用api获取当前mono 调用堆栈的方法
// 在mono源代码层级中加如下两个api 可以获取堆栈字符串 这两个api我新加的,原来没有.基于原来的代码改的. // add by bodong#if PLATFORM_WIN32 __dec ...
- A Walk Through the Forest (最短路+记忆化搜索)
Jimmy experiences a lot of stress at work these days, especially since his accident made working dif ...
- Inscribed Figures(思维)
The math faculty of Berland State University has suffered the sudden drop in the math skills of enro ...
- graph attention network(ICLR2018)官方代码详解(te4nsorflow)
论文地址:https://arxiv.org/abs/1710.10903 代码地址: https://github.com/Diego999/pyGAT 我并没有完整看过这篇论文,但是在大致了解其原 ...
- day46:jQuery
目录 1.jQuery初识 2.选择器 3.文本操作 4.class类值操作 5.css样式操作 6.值操作 7.注意点:button按钮提交form表单数据 8.jquery选择器补充 9.模态对话 ...