Для начала определим функцию определения простого числа:
def issimple(n):
r=math.ceil(math.sqrt(n))
for i in range(2,n):
if n%i==0:
return False
return True
для оптимизации перебираем числа до квадратного корня искомого числа. Если n делится на хотя бы одно число от 2-х до корня n возвращаем false. Иначе True
Приведу полный оптимизированный текст:
import math
def issimple(n):
r=math.ceil(math.sqrt(n))
for i in range(2,n):
if n%i==0:
return False
return True
n=5
s=[2,3]
while True:
if issimple(n) is True:
s.append(n)
if len(s)==10001:
break
n+=2
print(s[-1])
Объяснение:Не смотря на все попытки дальнейшей оптимизации цикл выполняется чуть меньше 3-х минут.
Основные принципы оптимизации: перебираем начиная с 5-ти и увеличиваем на 2 (чтобы не включать четные числа.
Условием выхода из цикла является длина списка = 10001
Если у вас получится выполнить задачу более оптимально рада услышать ваши предложения.
Из точки А в точку Б только 1 путь, поэтому Б будет равно 1
Из точки А в точку Г только 1 путь, поэтому Б будет равно 1
В точку В можно добраться из А(=1), Б(=1) и Г(=1), поэтому В будет равно 3
В точку Д можно добраться из Б(=1), В(=3), поэтому Д будет равно 4
В точку Е можно добраться из В(=3) и Г(=1), поэтому Е будет равно 4
В точку Ж можно добраться из Е(=4) и Г(=1), поэтому Ж будет равно 5
В точку З можно добраться из Д(=4), Е(=4) и Ж(=5), поэтому З будет равно 13
В данном типе задач главное не потеряться среди этих дорог и не забывать, что начальная точка (в данном случае А) всегда равна 1 (если не даны другие данные, конечно же)
Для начала определим функцию определения простого числа:
def issimple(n):
r=math.ceil(math.sqrt(n))
for i in range(2,n):
if n%i==0:
return False
return True
для оптимизации перебираем числа до квадратного корня искомого числа. Если n делится на хотя бы одно число от 2-х до корня n возвращаем false. Иначе True
Приведу полный оптимизированный текст:
import math
def issimple(n):
r=math.ceil(math.sqrt(n))
for i in range(2,n):
if n%i==0:
return False
return True
n=5
s=[2,3]
while True:
if issimple(n) is True:
s.append(n)
if len(s)==10001:
break
n+=2
print(s[-1])
Объяснение:Не смотря на все попытки дальнейшей оптимизации цикл выполняется чуть меньше 3-х минут.
Основные принципы оптимизации: перебираем начиная с 5-ти и увеличиваем на 2 (чтобы не включать четные числа.
Условием выхода из цикла является длина списка = 10001
Если у вас получится выполнить задачу более оптимально рада услышать ваши предложения.
НАДЕЮСЬ ТЫ ПОНЯЛ(А)
13
Объяснение:
По умолчанию, начальная точка равна 1 (точка А)
Из точки А в точку Б только 1 путь, поэтому Б будет равно 1
Из точки А в точку Г только 1 путь, поэтому Б будет равно 1
В точку В можно добраться из А(=1), Б(=1) и Г(=1), поэтому В будет равно 3
В точку Д можно добраться из Б(=1), В(=3), поэтому Д будет равно 4
В точку Е можно добраться из В(=3) и Г(=1), поэтому Е будет равно 4
В точку Ж можно добраться из Е(=4) и Г(=1), поэтому Ж будет равно 5
В точку З можно добраться из Д(=4), Е(=4) и Ж(=5), поэтому З будет равно 13
В данном типе задач главное не потеряться среди этих дорог и не забывать, что начальная точка (в данном случае А) всегда равна 1 (если не даны другие данные, конечно же)
Надеюсь , удачи!