Предмет: Информатика, автор: KolyaStepanenko473

Помогите ПОЧИНИТЬ код! После запуска ничего не происходит. Ответ должен быть 706630008. Сделайте все понятно, халявщики брысь.

Приложения:

olga0olga76: она работает... можете добавить несколько print с выводом промежуточных результатов, и оно будет выводить
olga0olga76: Но работает она очень-очень медленно
olga0olga76: Подумать над тем, как переделать вашу программу,или вам необходим именно такой вариант?
KolyaStepanenko473: Да, спасибо
KolyaStepanenko473: (подумать)
olga0olga76: а у вас есть ограничения по времени выполнения программы?
KolyaStepanenko473: Нет
olga0olga76: ну у вас она работала примерно 6 мин, получилось сократить до 3
olga0olga76: но это далеко не идеальный результат... вы массивы проходили?
KolyaStepanenko473: Да, проходил

Ответы

Автор ответа: olga0olga76
1

Ответ:

(cмотри также прикреплённые фото)

count = 0      #количество чисел подходящих условию задачи

min = 70001    #минимальное число подходящее условию задачи

now_el = 30001 #текущее число (элемент)

finish_el = 70000 #последнее число (элемент)  

while now_el <= finish_el:

 print (now_el)  #вывод текущего числа (чтобы видеть, что программа работает, можно удалить!!!)

 d = [x for x in range (1, now_el // 2 + 1) if now_el % x == 0] + [now_el]

 print (d) #вывод делителей тек. числа (чтобы видеть, что программа работает, можно удалить!!!)

 if (len(d) > 17):  

   count += 1  

   if(min > now_el):  

     min = now_el

 now_el+=1  

print('Ответ:')

print(count, min)

Объяснение:

Задаём переменные с их начальными значениями:

count = 0     #количество чисел подходящих условию задачи

min = 70001   #минимальное число подходящее условию задачи

now_el = 30001 #текущее рассматриваемое число (элемент)

finish_el = 70000 #последнее рассматриваемое число (элемент)  

While работает чуть-чуть более эффективно, чем for, поэтому используем while (выполняется действие, пока текущий рассматриваемый элемент меньше либо равен последнему рассматриваемому элементу):

while now_el <= finish_el:

Вывод текущего элемента (для себя, можно удалить):

 print (now_el) #вывод текущего числа (чтобы видеть, что программа работает, можно удалить!!!)

Создаётся массив d - массив делителей текущего числа, следующим образом:

1*** для каждого х от 1 до текущий элемент/2+1 (for x in range (1, now_el // 2 + 1),

2*** проверяется условие деления текущего элемента на х без остатка, то есть остаток от деления должен быть = 0 (if now_el % x == 0)

3*** и если это условие выполняется, то элемент х добавляем в массив d

( d = [x for x in range (1, now_el // 2 + 1) if now_el % x == 0] )

4*** так как любое число делится само на себя, то также в массив d добавляем текущий элемент now_el (  d = ... + [now_el] )

 d = [x for x in range (1, now_el // 2 + 1) if now_el % x == 0] + [now_el]

Для себя выводим полученный массив делителей d:

 print (d) #вывод делителей тек. числа (чтобы видеть, что программа работает, можно удалить!!!)

Если длина массива d(количество делителей числа d) > 17:

 if (len(d) > 17):

То выполняем следующие действия:

- количество подходящих под условии чисел (count) увеличиваем на 1

   count += 1  

- сравниваем минимальное подходящее число min и текущее now_el (и при необходимости присваиваем новое значение  (min=now_el))

   if(min > now_el):  

     min = now_el

Увеличиваем значение переменной текущего элемента (now_el) на 1:

 now_el+=1  

Выводим полученный результат:

print('Ответ:')

print(count, min)

Приложения:

olga0olga76: а забыла ещё указать, что когда ищем делители, то не обязательно проверять деление текущего числа х на число от 1 до х, достаточно от 1 до х/2+1, но не забывая про то, что х делится ещё и на само себя(х)
olga0olga76: х=х*1=(х/2)*2=(х/3)*3=...
olga0olga76: то есть наибольший возможный делитель числа х = х, потом х/2
olga0olga76: следовательно в промежутке от х/2+1 до х-1 - 100% нет делителей числа х
olga0olga76: поэтому эту часть промежутка возможных делителей проверять не нужно
KolyaStepanenko473: Спасибо большое за уделённое время и подробный, понятный ответ!
Похожие вопросы
Предмет: Русский язык, автор: saiman7771
Предмет: Русский язык, автор: cakesevencom1
Через несколько минут Никита, стоя в коридоре, увидел как тяжело отворилась обитая войлоком дверь, влетел клуб морозного пара, и появилась высокая и полная женщина, вся запорошенная снегом. Она держала за руку мальчика в сером пальто с блестящими пуговицами и в башлыке. За ним, стуча морозными валенками, вошел ямщик с ледяной бородой, с желтыми сосульками вместо усов, с белыми мохнатыми ресницами. На руках у него лежала девочка, склонив голову на плечо ямщика.
Войдя, высокая женщина воскликнула громким басом : "Александра Леонтьевна, принимай гостей! " Это была матушкина приятельница, живущая всегда в Самаре. Сын ее, ожидая, когда с него снимут башлык, глядел на Никиту. Матушка приняла у кучера спящую девочку. Девочка вздохнула и открыла синие большие глаза, и вздохнула еще раз, просыпаясь.

Грамматические задания.
Ответьте да или нет.

Запишите номер задания и только ответ - да или нет

1. В 1-м предложении I абзаца есть деепричастный оборот.
2. Найдите во 7-м предложении деепричастие и ответьте, соответствует ли оно схеме ⌐ ͡ ˄˄
3. В тексте есть прямая речь.
4. В последнем абзаце есть причастный оборот.
5. В последнем абзаце – два одиночных деепричастия.
6. В 5 предложении есть слова с чередующейся гласной в корне слова.
7. В I абзаце – три деепричастных оборота.
8. В предпоследнем предложении I абзаца есть однородные члены.
9. В тексте отсутствуют имена собственные.
10. В слове «пр...ехали» приставка имеет значение «неполнота действия».



И пожалуйста, выделите деепричастные обороты!!!




20 БАЛЛОВ!