У меня есть упражнение о простых числах, которое требует от меня написать функцию, которая берет список элементов и число p и помечает элементы False, которые находятся в диапазоне 2p, 3p ... N
First Я создаю список True и False:
true_value = [False, False] + [True for x in range(n-1)] #Let assumme that n=16
И затем я пишу функцию, которая находит четное число в этом списке (с p = 2)
def mark_false(bool_list, p):
range_new = [x for x in range(len(bool_list))]
for i in range(2, len(range_new)):
for j in range(p, len(range_new), p):
if (i*p == range_new[j]) & (i*p <= len(range_new)):
bool_list[j] = False
return bool_list
Эта функция помогает мне найти местоположение четного числа (> 2) и вернуться к False
Пример: a = list_true(16)
a = [False,False,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True]
b = mark_false(a, 2)
b = [False,False,True,True,False,True,False,True,False,True,False,True,False,True,False,True]
Эта функция mark_false
работает, но проблема возникает каждый раз, когда я запустить его, я должен создать список range_new
, который требует много времени для расчета. Итак, как мне переписать эту функцию, чтобы она могла работать быстрее без создания новых списков?