蓝桥杯python-2022-B组-寻找整数

蓝桥杯python
在这里插入图片描述
就是通过动态调整范围,一轮一轮的进行筛选。
比如说先产生一组初始数,从mod2到10中筛选出满足所有条件的数,
然后再从这些筛选的数中取值第一个为起始值,以ls[1]-ls[0]为步长的产生一组新的扩大范围的数,这个范围由上面的ls的end值来确定,如果end值大那么相应这个范围就大一些,再从mod10到20中筛选满足所有条件的数,那么现在得到的是mod2到mod20都满足条件的。

mp = {2: 1, 3: 2, 4: 1, 5: 4, 6: 5, 7: 4, 8: 1, 9: 2, 10: 9, 11: 0, 12: 5, 13: 10, 14: 11, 15: 14, 16: 9, 17: 0, 18: 11,19: 18, 20: 9, 21: 11, 22: 11, 23: 15, 24: 17, 25: 9, 26: 23, 27: 20, 28: 25, 29: 16, 30: 29, 31: 27, 32: 25,33: 11, 34: 17, 35: 4, 36: 29, 37: 22, 38: 37, 39: 23, 40: 9, 41: 1, 42: 11, 43: 11, 44: 33, 45: 29, 46: 15, 47: 5, 48: 41, 49: 46}
ls=[i for i in range(1,10**4)]
#首先筛选出模2-10中,满足条件的数,第一轮筛选出mod2等于1的数,然后从这些数中继续筛选mod3等于2的数....
for i in range(2,10):
    ls=list(filter(lambda x:x%i==mp[i],ls))
print(ls)
#这里的10**9由上面ls的end值确定
ls=[i for i in range(ls[0],10**9,ls[1]-ls[0])]
for i in range(10,20):
    ls=list(filter(lambda x:x%i==mp[i],ls))
print(ls)

ls=[i for i in range(ls[0],10**14,ls[1]-ls[0])]
for i in range(20,30):
    ls=list(filter(lambda x:x%i==mp[i],ls))
print(ls)

ls=[i for i in range(ls[0],10**17,ls[1]-ls[0])]
for i in range(30,50):
    ls=list(filter(lambda x:x%i==mp[i],ls))
print(ls)

看图理解为啥ls[1]-ls[0]作为步长:
在这里插入图片描述
**代码中使用的各种数值,包括但不限于 **

104和109等,都是根据具体问题需求而主观选择的。在编写代码时,开发者需要根据所要处理的数据规模、程序的实现方式及算法等因素来灵活选择这些参数。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值