有没有办法改进我的算法,以便在计算时间方面获得最佳算法?
给定一系列非零被除数[A,B](1 <= A,B <= 10 ^ 18),并且一组除数D = {x:1 <= x <= 50 },我想找到[A,B]中非重复红利的总数,可以除以集D中的任何数字。
示例1(不花太多时间)
红利数[1,10]
和除数的范围是{2,3,4}
2,4,6,8,10
3,6,9
4,8
所以[1,10] = 7
示例2(花费大量时间)
[A,B] = [79031836253224256, 403892407826392155]
D = {44, 46, 50, 8, 35,41,6,18, 24, 23, 7, 45, 39, 46, 4, 35, 34}
Output: 161802330522861274
Python中的第一个算法版本
def solution(A,B,D):
a = set()
for i in range(A,B+1):
for j in D:
if i%j == 0:
a.add(i)
# return the count of a
return len(a)
if __name__ == "__main__":
print(solution(1,10,[2,3,4]))