Как ускорить код работы программы?
Определите количество принадлежащих отрезку [2 · 10^10; 4 · 10^10] натуральных чисел, которые делятся на 7 и на 100 000 и при этом не делятся на 13, 29, 43 и 101, а также наименьшее из таких чисел. В ответе запишите два целых числа без пробелов и других дополнительных символов: сначала количество, затем наименьшее число.
m = 4 * 10**10 +1
k=0
for i in range(2 * 10**10,4 * 10**10 +1):
if i %7==0 and i %100000==0 and i %13!=0 and i %29!=0 and i %43!=0 and i %101!=0:
k +=1
if i<m:
m=i
print(k,m)
в IDLE запускаю и просто выдачи ответа не дождаться, как ускорить можно было бы?
Ответы (1 шт):
Если чуть-чуть подумать, то 2 * 10**10 конечно делится на 100000 нацело (там ведь 10 нулей в конце). А какое следующее число будет делиться на 100000 нацело? Конечно же 2 * 10**10 + 100000. А следующее? Таким образом, просто нужно перебирать не все числа подряд, а с шагом 100000. И у range для такого перебора есть специальный третий параметр. Ответ получается моментально.