zoukankan      html  css  js  c++  java
  • 使用迭代器的方法找出素数

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

    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
    
    
  • 相关阅读:
    2012工作计划!
    造船篇系统实施(新老衔接工作)
    Android学习摘要一之Android历史
    DEVReport控件使用方法
    造船篇 前传
    软件实施(1)
    茫然疑问未来
    造船篇钢材管理
    wcf身份验证问题
    IDL中关于波段计算的问题
  • 原文地址:https://www.cnblogs.com/yangsun/p/12046261.html
Copyright © 2011-2022 走看看