本帖最后由 happy886rr 于 2016-4-11 09:34 编辑
三种不同算法,最后一个基于最好的数学理论.- # Python解EulerPJ-7P:The 10001st prime number is?
- # 常规解法用小于根号N的奇数去除
- N=1;i=1;
- while i<10001:
- N+=2;v=1
- for j in range(3,int(N**0.5)+1,2):
- if N%j is 0:
- v=0;
- if v is 1:
- i+=1
- print(N)
复制代码
- # Python解EulerPJ-7P:The 10001st prime number is?
- # 构建素数数组p,只用素数数组中的数去除,按理说速度会提高,自己语法不太会,速度没提高很囧。
- N=1;i=1;p=[]
- p.append(3)
- while i<10001:
- N+=2;v=1
- for j in range(1,len(p)):
- if N%p[j] is 0:
- v=0
- if p[j]**2>N:
- break
- if v is 1:
- i+=1;p.append(N)
- print(N)
复制代码
- # Python解EulerPJ-7P:The 10001st prime number is?
- # 构建小于1000/3的素数数组p,只用小于333.3...的素数去除,理论上讲是最优解法,但是python数组效率没救了,居然用了0.7秒才出结果。脑汁已用尽!
- N=1;i=1;p=[]
- p.append(3)
- while i<10001:
- N+=2;v=1
- for j in range(1,len(p)):
- if N%p[j] is 0:
- v=0
- if v is 1:
- i+=1
- if N<333:
- p.append(N)
- print(N)
复制代码
|