我是靠谱客的博主 炙热战斗机,最近开发中收集的这篇文章主要介绍python 题解(3 第N个素数)第N个素数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第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个素数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部