代码改变世界

使用迭代器的方法找出素数

2019-12-15 22:04  那个杰克  阅读(432)  评论(0编辑  收藏  举报

问题:自定义一个生成小于某个整数的所有素数的迭代器

class MySuShuIterator():

	def __init__(self,start,end):
		self.__start = start
		self.__end = end

	def __iter__(self):
		return self


	def __next__(self):
		for item in range(self.__start,self.__end):
			if self.isPrime(item):
				self.__start = item+1
				return item
		raise StopIteration

		
	def isPrime(self,item):
		if item == 1:
			return False
		else:
			for value in range(2,item):
				if item % value == 0:
					return False
			return True


思路:
思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ m的开平方根之间的每一个整数去除就可以了。如果m不能被2~m的开平方根间任一整数整除,m必定是素数。
例如:判别17是否是素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数

编程思路:
1、先把创建迭代器的类写好,需新建一个迭代器的class, 定义上迭代器协议方法

class MyIteration(object):
	def __init__(self,start,end):
		self.start = start
		self.end = end
	def __iter__(self):
		return self

	def __next__(self):
		if [xxx]:
			pass
		else:
			raise StopIteration

2、在迭代器类里定义一个是否是素数逻辑的方法(重点:使用range()内置函数,拿到可以进行去整除的数)

def isPrime(self):
		if item == 1:
			return False
		else:
			for value in range(2,item):
				if item % value == 0:
					return False
		return True