Форум » Логические выражения » задание ЕГЭ 15, №385 » Ответить

задание ЕГЭ 15, №385

mdziova: #385 [pre2] for a in range (200,2000): f=0 for x in range (10,1000): for y in range (10,1000): if (((x%a==0 and x%45==0)<=(x%162==0))and a>200)==0: f=7 if f==0: print (a)[/pre2] При запуске этот код выдаёт все числа от 201. Упростив выражение, получили: (¬ДЕЛ(x, A) v ¬ДЕЛ(x, 45) v ДЕЛ(x, 162))& ( A > 200). Условие (A > 200) обязательно должно выполняться, а в левой части выражения нам достаточно выполнения одного из трёх условий?! Ну и почему тогда ответом не может быть 201?

Ответов - 5

Поляков: mdziova пишет: Ну и почему тогда ответом не может быть 201? Проверьте при x = 3015.

mdziova: Хорошо, проясняется! Как это исправить в коде?

cabanov.alexey: Задавать бОльший диапазон перебора x и y.


s11kai: cabanov.alexey пишет: Задавать бОльший диапазон перебора x и y. а, для чего здесь нужен y? mdziova пишет: for a in range (200,2000): [pre2] f=0 for x in range (10,1000): for y in range (10,1000): #для чего данная строка, если логическое выражение содержит только X и А if (((x%a==0 and x%45==0)<=(x%162==0))and a>200)==0: f=7 if f==0: print (a) [/pre2]

s11kai: mdziova пишет: Как это исправить в коде? 1 - уберите данную строку - for y in range (10,1000):, тем самым, значительно сократите время на вычисление 2 - значение x поднимите как минимум до 15000 или выше 3 - если долго будет думать, добавьте под командой f=7;break а, если нет желания наблюдать длинный список чисел от 324 до 15000 - завершите программу так: print (a);break



полная версия страницы