【发布时间】:2013-04-12 05:14:18
【问题描述】:
这是我思考了很久的问题。
找出从 a 到 b 的所有数不能被从 x 到 y 的任何数整除的最快方法是什么?
考虑一下:
我想找出 1 到 10 中所有不能被 2 到 5 整除的数字。 如果我在哪里使用线性方法,这个过程将变得非常缓慢; 像这样:
result = []
a = 1
b = 10
x = 2
y = 5
for i in range(a,b):
t = False
for j in range(x,y):
if i%j==0:
t = True
break
if t is False:
result.append(i)
return result
有谁知道比线性解决方案计算时间更短的任何其他方法?
如果没有,谁能看到这个可能做得更快,因为我现在是空白的......
真诚地, 约翰
[编辑]
数字的范围是0到>1,e+100
对于 a、b、x 和 y 都是如此
【问题讨论】:
-
您是针对大 (b-a)、大 b、大 (y-x)、大 y 优化还是使用小数字多次调用它?我怀疑答案会因这些问题而异
-
这是问题的一部分:a、b、x、y,逐渐增长
-
你不想写 1e100 而不是 "1,e+100" 吗?如果是这种情况,那么很难找到一种非常快速的方法,因为这组数字不适合内存,甚至是硬盘驱动器(到目前为止)。如果数字计数是合理的(比如大约 1e8,以便它们适合内存),那么可以通过以内存换速度来获得快速的方法。
标签: python math set division modulo