概述
第N个素数
【问题】 素数就是只能被1和自身整除的正整数。第1个素数是2,第2个素数是3,请编程计算第N个素数。比如 N = 100000
判断一个数是不是素数比较容易实现。
所以,最正常的想法是,找一个素数就扔筐里,直到凑够了数。
如果不想走平常路,就弄个递归玩玩。
def isPrime(x):
for i in range(2,x):
if x % i == 0: return False
return True
def primes(n):
if n == 1: return 2
x = primes(n-1) + 1
while True:
if isPrime(x): return x
x += 1
if __name__ == '__main__':
print(primes(1000))
这思路很好理解。第1个素数是2,如果第n-1个素数是x,那就从x+1 开始探测到第一个素数为所求。
如果想优化一下。判断整除的时候,不用从 2 到 x-1,从 2 到 sqrt(x) 就足够了。
使用递归要注意。python 默认的栈极限是很小的。只有1000,一下就会用光,可以设大点,
如下:
if __name__ == '__main__':
import sys
sys.setrecursionlimit(10000)
print(primes(1000))
这个程序在对大数的时候很慢。十万量级的根本跑不动。
得优化。
判断整除性的时候,只对比它小的素数就行,不用对合数。
把所有已经找到的素数放一个数组里。后面的用就方便了。
def primes(n):
def isPrime(x):
for i in a:
if i * i > x: return True
if x % i == 0: return False
return True
a = [2]
x = 3
while len(a) < n:
if isPrime(x):
a.append(x)
x += 1
return a[-1]
if __name__ == '__main__':
print(primes(100000))
python 的函数可以嵌套,内部的函数可以使用外部函数的局部环境。
这才可以勉强算到十万
需要补基础的,可以看:小甲鱼pyhthon教程,Bilibili站上还有:[耿老师]小甲鱼python作业 解析系列,持续更新中。
最后
以上就是炙热战斗机为你收集整理的python 题解(3 第N个素数)第N个素数的全部内容,希望文章能够帮你解决python 题解(3 第N个素数)第N个素数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复