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)
3 votes Thanks 1
olga0olga76
а забыла ещё указать, что когда ищем делители, то не обязательно проверять деление текущего числа х на число от 1 до х, достаточно от 1 до х/2+1, но не забывая про то, что х делится ещё и на само себя(х)
Answers & Comments
Ответ:
(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)