Даны два натуральных числа a и b. Найдите все числа, принадлежащие отрезку [a; b], являющиеся произведением трех различных простых делителей. Выведите количество таких чисел, их среднее арифметическое, а также минимальное и максимальное их них.
Входные данные
Программа получает на вход натуральные числа a и b, не превышающие 107, a ≤ b.
Выходные данные
Вывести в одной строке через пробел 3 числа, являющиеся ответом к задаче. Если чисел, удовлетворяющих условию задачи, на отрезке нет, то программа не должна ничего выводить.
Python
Python. Вложенные циклы. Решение без использования функций(def;len; и тд)
"Выведите количество таких чисел, их среднее арифметическое, а также минимальное и максимальное их них" - итого 4 числа. Но далее написано: "Вывести в одной строке через пробел 3 числа, являющиеся ответом к задаче". WTF?
Вот такая реализация:
Вот такая реализация:
MAX = 107
PRIMES = [2, 3, 5, 7] # простые числа, квадрат которых не более половины ограничителя (107/2)
a, b = [int(x) for x in input("Введите границы отрезка a, b через пробел: ").split()]
if a > b or b > MAX:
print("Нижняя граница должны быть меньше верхней, и обе не должны превышать 107")
quit()
comp3count = 0
comp3sum = 0
comp3min = MAX + 1
comp3max = 0
for n in range(a, b + 1):
part = n # то, для чего ищем делители
dcount = 0 # количество делителей (всегда не менее 1, т.к. один делитель - само число)
for p in PRIMES:
if p * p > part: break # дальше делить нет смысла
while part % p == 0: # найден делитель, делим, пока делится
part /= p
dcount += 1
if part > 1: dcount += 1 # если что-то осталось, то оно - тоже множитель
if dcount == 3:
comp3count += 1
comp3sum += n
if comp3min > n: comp3min = n
if comp3max < n: comp3max = n
if comp3count > 0:
print(comp3count, comp3sum / comp3count, comp3min, comp3max)
Некоторые пояснения: - Чтобы найти простой множитель N, необходимо перебирать множители только до √N (думаю, понятно, почему).
- Общее же ограничение сверху на простые числа - это √(MAX / 2) (т.к. если у нас 3 делителя, то один из них - не менее 2, а далее нужно перебирать потенциальные множители MAX/2).
- comp3min, comp3max необязательно сравнивать на каждой итерации; т.к. мы перебираем числа по возрастанию, то comp3min будет первым найденным числом, а comp3max - последним. Но это усложнит алгоритм.
Похожие вопросы
- Python. Решение без функции def, словарей и списков
- Pyrhon. Вложенные циклы. Без использования словарей, списков, строк, функций пользователя
- Когда делать функцию def через return, а когда нет
- Как возвести число в степень в python через цикл while? В чем моя ошибка в коде? Объясните, пожалуйста подробнее
- Python FOR цикл
- Python. Високосный год. Решение задач
- Python def функция
- Как использовать переменную созданную в def во всей программе python
- арументы (изменяемых объектов) функций в 1с и Python
- Подскажите ресурс\книги с примерами по высшей математике и их решений на языке Python