range(1, 600851475143)
хочет создать очень большой список в памяти, и вы получите ошибку нехватки памяти. Для экономии памяти используйте xrange
вместо range
. К сожалению, xrange
не работает с большими числами (это ограничение реализации) Пример (вызывает OverflowError):
for i in xrange(1, 600851475143):
print i
Вы можете иметь большие минимальные или максимальные значения в интервале с range
, если их разница невелика. Пример:
x = 1 << 200
print list(xrange(x, x + 3))
Выход:
[1606938044258990275541962092341162602522202993782792835301376L, 1606938044258990275541962092341162602522202993782792835301377L, 1606938044258990275541962092341162602522202993782792835301378L]
Причудливое решение вашей исходной проблемы петли для :
def bigrange(a, b = None):
if b is None:
b = a
a = 0
while a < b:
yield a
a += 1
for i in bigrange(1, 600851475143):
print i
Менее сложное решение, которое работает, даже если у вас в теле цикла continue
:
i = 1 - 1
while i < 600851475143 - 1:
i += 1
print i