鱼C论坛

 找回密码
 立即注册
查看: 7734|回复: 47

[技术交流] Python:每日一题 207

[复制链接]
发表于 2018-9-11 17:01:30 | 显示全部楼层
本帖最后由 天圆突破 于 2018-9-11 22:22 编辑
  1. class Feb:
  2.     def __init__(self):
  3.         self.a = self.b = 1

  4.     def __iter__(self):
  5.         return self

  6.     @staticmethod
  7.     def filter_num(n):
  8.         # 取集合,筛去0和1
  9.         lst = list(filter(lambda x:x!=0 and x!=1,set(map(lambda x:int(x), str(n)))))
  10.         # 倒序排序,早碰上早滚蛋,提高效率
  11.         lst.sort(reverse=True)
  12.         for each_n in lst:
  13.             if n%each_n != 0:
  14.                 return False
  15.         return True

  16.     def __next__(self):
  17.         while True:
  18.             self.a, self.b = self.b, self.a+self.b
  19.             if self.filter_num(self.a) and self.a > 10:
  20.                 return self.a

  21. if __name__ == '__main__':
  22.     for i in Feb():
  23.         input(i)
复制代码

我觉得考虑效率的话,去重去01外加逆排序就足够了
如果为了去掉2,3,4(只能去这3个数字),需要遍历4次才能去干净(从集合里找9864),不去的话只会多遍历3次(带着234去除).
所以还是不去了吧.

点评

大数的取模运算比去2,3,4要更费时  发表于 2018-9-12 20:49

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-22 19:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表