Что можете посоветовать?
sum(range(n+1))
- константа (в дальнейшем,
C) для заданного n, можно вынести ее вычисление за цикл.
Далее, ваше уравнение можно переписать:
b = (
C-
a)/(
a+1). Можно перейти от квадратичного времени к линейному, итерируя по
a и проверяя делимость (
C-
a) на (
а+1)
Навскидку:
def get_ab(n):
C=sum(xrange(1,n+1))
return [(a, (C-a)/(a+1)) for a in xrange(1,n+1) if (C-a)%(a+1)==0 and (C-a)/(a+1)<n]
In [10]: % timeit removNb(10)
1000 loops, best of 3: 185 us per loop
In [11]: %timeit get_ab(10)
100000 loops, best of 3: 6.74 us per loop