|
发表于 2018-9-11 17:01:30
|
显示全部楼层
本帖最后由 天圆突破 于 2018-9-11 22:22 编辑
- class Feb:
- def __init__(self):
- self.a = self.b = 1
- def __iter__(self):
- return self
- @staticmethod
- def filter_num(n):
- # 取集合,筛去0和1
- lst = list(filter(lambda x:x!=0 and x!=1,set(map(lambda x:int(x), str(n)))))
- # 倒序排序,早碰上早滚蛋,提高效率
- lst.sort(reverse=True)
- for each_n in lst:
- if n%each_n != 0:
- return False
- return True
- def __next__(self):
- while True:
- self.a, self.b = self.b, self.a+self.b
- if self.filter_num(self.a) and self.a > 10:
- return self.a
- if __name__ == '__main__':
- for i in Feb():
- input(i)
复制代码
我觉得考虑效率的话,去重去01外加逆排序就足够了
如果为了去掉2,3,4(只能去这3个数字),需要遍历4次才能去干净(从集合里找9864),不去的话只会多遍历3次(带着234去除).
所以还是不去了吧. |
评分
-
查看全部评分
|