蓝桥杯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等,都是根据具体问题需求而主观选择的。在编写代码时,开发者需要根据所要处理的数据规模、程序的实现方式及算法等因素来灵活选择这些参数。