Только начал изучать Python на платформе Сириус. Смог решить все остальные задачи из темы «while», кроме одной задачи, которая мне не позволяет пройти на следующие темы. Задача «Минимальный простой делитель числа».
Условие: Дано целое число, не меньшее 2. Выведите его наименьший простой делитель. Нельзя использовать дополнительные библиотеки (math и т.п.)!
Входные данные: Вводится целое положительное число N <= 2*10 в 9-ой степени.
Выходные данные: Выведите ответ на задачу.
Пытался решить, написав код с while, но мой ответ не засчитывается, по причине слишком долгого времени работы программы. Рекомендуют организовать цикл, перебирающий делители до корня из числа N: while i*i <= N:
, но я не могу понять, как это сделать.
Мой код Python (выдаёт ошибку «Программа выполнялась слишком долго и была прервана» либо «Программа выдаёт ошибку в процессе выполнения»):
N = int(input())
i = 2
while i*i <= N:
if N%i != 0:
i += 1
print(i)
Не могу понять, в чём ошибка?
Riita 3 / 2 / 1 Регистрация: 07.09.2017 Сообщений: 27 |
||||
1 |
||||
09.09.2017, 17:25. Показов 192841. Ответов 14 Метки нет (Все метки)
Есть задача: Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1. Пыталась, написала так, только получается не наименьший делитель, а все возможные делители отличные от 1 :с
Помогите решить, чтоб выводило только наименьший
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
09.09.2017, 17:25 |
14 |
Dominatrix 33 / 30 / 16 Регистрация: 21.01.2014 Сообщений: 101 |
||||
09.09.2017, 21:57 |
2 |
|||
Сообщение было отмечено mik-a-el как решение РешениеНу, как бы всё очевидно – нужно всего лишь выйти из цикла при обнаружении первого (он и есть наименьший) делителя:
0 |
3 / 2 / 1 Регистрация: 07.09.2017 Сообщений: 27 |
|
09.09.2017, 22:05 [ТС] |
3 |
Спасибо) Упс, забыла про break Просто на курсе объяснялось, что эту команду лучше не использовать, или здесь больше нет вариантов?
0 |
easybudda Модератор 11757 / 7257 / 1720 Регистрация: 25.07.2009 Сообщений: 13,266 |
||||
09.09.2017, 22:25 |
4 |
|||
Просто на курсе объяснялось, что эту команду лучше не использовать Как-нибудь обосновывали, или нужно было на слово поверить?
или здесь больше нет вариантов? Да полно!
только надо убедиться, что переданное число не меньше двух…
1 |
3 / 2 / 1 Регистрация: 07.09.2017 Сообщений: 27 |
|
09.09.2017, 22:41 [ТС] |
5 |
Ну вот решила поверить, думала люди создавшие видео-курс говорят только правильные вещи и надо их беспрекословно слушать 😀
0 |
easybudda Модератор 11757 / 7257 / 1720 Регистрация: 25.07.2009 Сообщений: 13,266 |
||||
09.09.2017, 23:11 |
6 |
|||
Сообщение было отмечено mik-a-el как решение Решение
Ну вот решила поверить “Верить нельзя никому, даже самому себе! Мне можно…” (с)
дошла только до цикла while
0 |
3 / 2 / 1 Регистрация: 07.09.2017 Сообщений: 27 |
|
09.09.2017, 23:39 [ТС] |
7 |
Эм, не пойму почему после n % 1 нет = и какого-то результата и как в принципе работает этот код, что он дает правильный ответ? ._.
0 |
33 / 30 / 16 Регистрация: 21.01.2014 Сообщений: 101 |
|
09.09.2017, 23:45 |
8 |
не пойму почему после n % 1 нет = и какого-то результата n % i эквивалентно n % i == 1
1 |
3 / 2 / 1 Регистрация: 07.09.2017 Сообщений: 27 |
|
09.09.2017, 23:51 [ТС] |
9 |
Ааа, теперь ясно, буду знать
0 |
Модератор 11757 / 7257 / 1720 Регистрация: 25.07.2009 Сообщений: 13,266 |
|
10.09.2017, 00:37 |
10 |
Ааа, теперь ясно, буду знать Немного не так: результат выражения равный нулю трактуется как False, неравный – True
0 |
tana256 0 / 0 / 0 Регистрация: 01.01.2019 Сообщений: 2 |
||||
01.01.2019, 19:18 |
11 |
|||
Начала изучать Python, помогите пожалуйста, с поиском ошибки в задачи. Система выдает сообщение на 14 тесте: “Превышено максимальное время работы” и оценивает 13 баллов из 100
Миниатюры
0 |
0 / 0 / 0 Регистрация: 01.01.2019 Сообщений: 2 |
|
01.01.2019, 21:34 |
12 |
Пересмотрела все варианты которые выше и в похожых темах, этот ответ система оценила наибольшим количеством балов 13.
0 |
Модератор 11757 / 7257 / 1720 Регистрация: 25.07.2009 Сообщений: 13,266 |
|
02.01.2019, 06:03 |
13 |
“Превышено максимальное время работы” Вообще для интерпретируемого языка проблема скорее надуманная… Но в принципе можно и ускорить.
1 |
Alexey_Boroduli 1 / 1 / 0 Регистрация: 24.02.2019 Сообщений: 8 |
||||
24.02.2019, 16:50 |
14 |
|||
Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1.
1 |
Ergo_py 2 / 2 / 0 Регистрация: 24.08.2020 Сообщений: 15 |
||||
25.08.2020, 09:49 |
15 |
|||
2 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
25.08.2020, 09:49 |
Помогаю со студенческими работами здесь Дано натуральное число. Найти его наименьший делитель, отличный от 1 Дано натуральное число. Найти его наименьший делитель, отличный от 1 Выведите наименьший натуральный делитель, отличный от 1 Дано натуральное число n1. Выведите его наименьший делитель, отличный от 1 Решение оформите в… Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1 Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 15 |
Делитель — это число, на которое нацело делится делимое. У делимого может быть один или несколько делителей, найти их все можно с помощью простого алгоритма, который без проблем реализуется на Python 3.
Нахождение делителей числа
С практической точки зрения будет полезно, если программа на Python не только будет находить делители числа, искать их сумму, определять минимальный и максимальный, а также простые делители.
Каждая подзадача так или иначе связана с предыдущей, поэтому код последующей программы — это немного модернизированный код предыдущей. Кроме того, весь функционал при необходимости можно объединить в одной программе.
Алгоритм нахождения очень простой. В цикле перебираются значения от делимого минус единица до двух включительно. Если делимое нацело делится на текущее значение, то оно является делителем.
Пользователь вводит целое число, делителей которого будет искать программа, тогда код выглядит так:
numb = int(input("Введите целое число: ")) print("Результат:", end = " ") for i in range(numb - 1, 1, -1): if (numb % i == 0): print(i, end = " ")
Например, пользователь ввёл число 625. Программа начинает цикл со значения 624, в цикле проверяется, делится ли нацело 625 на 624, затем цикл переходит на следующую итерацию и работает уже с числом 623 и так до двух. Таким образом, вывод программы будет следующим:
Введите целое число: 625 Результат: 125 25 5
Простые делители числа
Простой делитель — это делитель, который делится только на единицу и самого себя. Для нахождения простых делителей с помощью Python нужно немного модернизировать программу, добавив в неё дополнительный цикл for и переменную счётчик.
Программа построена по следующему алгоритму:
- Обнулить счётчик.
- В цикле искать делители.
- Если найден, искать во вложенном цикле его делители. Это для того, чтобы определить: является ли он простым.
- Если найден, увеличить счётчик.
- Если счётчик равен нулю, то число простое и надо вывести значение делителя в консоль.
- Перейти на следующую итерацию внешнего цикла.
Цикл теперь выглядит так:
numb = int(input("Введите целое число: ")) print("Простые:", end = " ") for i in range(numb - 1, 1, -1): is_simple = 0 # Счётчик if (numb % i == 0): for j in range(i - 1, 1, -1): if (i % j == 0): is_simple = is_simple + 1 # Увеличиваем, если находим делитель if (is_simple == 0): # Если делителей не было найдено, выводим print(i, end = " ")
Понятно, что если значение счётчика больше нуля — то число точно не простое. Можно оптимизировать немного код и сразу завершать вложенный цикл после увеличения счётчика. Для этого можно воспользоваться оператором break
в условном операторе, находящемся во вложенном цикле.
Результат работы программы:
Введите целое число: 63 Простые: 7 3
Делители расположены в порядке убывания. И если надо вывести только самый большой простой делитель с помощью Python, то можно после того, как выведется первое число, воспользоваться оператором break
для выхода из цикла.
Сумма делителей
Для того чтобы найти сумму всех делителей числа с помощью Python, достаточно добавить в начальную программу переменную, к которой в цикле будет прибавляться каждый найденный делитель.
Код программы:
numb = int(input("Введите целое число: ")) sum_of_dividers = 0 for i in range(numb - 1, 1, -1): if (numb % i == 0): sum_of_dividers += i print("Сумма:", sum_of_dividers)
Результат выполнения кода:
Введите целое число: 63 Сумма: 40
Количество делителей
Этот вариант программы также лишь незначительно отличается от изначального. Для подсчёта делителей нужно ввести переменную-счётчик, к которой будет прибавляться единица каждый раз, когда условие «numb % i == 0
» будет выполняться.
numb = int(input("Введите целое число: ")) count_of_dividers = 0 for i in range(numb - 1, 1, -1): if (numb % i == 0): count_of_dividers += 1 print("Количество равно:", count_of_dividers)
Результаты выполнения программы:
Введите целое число: 63 Количество равно: 4
Максимальный и минимальный делитель
Для нахождения минимального и максимального делителя в код на Python нужно добавить две переменные: min_divider
и max_divider
. В цикле делитель будет сравниваться со значением этих переменных и, если необходимо, записываться в них.
Код программы:
numb = int(input("Введите целое число: ")) min_divider = numb max_divider = 1 for i in range(numb - 1, 1, -1): if (numb % i == 0): if (min_divider > i): min_divider = i if (max_divider < i): max_divider = i print("Минимальный равен:", min_divider) print("Максимальный равен:", max_divider)
Результат выполнения:
Введите целое число: 63 Минимальный равен: 3 Максимальный равен: 21
Нахождение наименьшего и наибольшего делителя, подсчёт суммы делителей и их количества можно объединить в одну программу на Python. Это не должно вызвать каких-либо проблем или конфликтов, потому что программа работает с 4 независимыми переменными.
Описание задачи
Эта программа принимает на вход целое число и выводит его наименьший делитель.
Решение задачи
- Принимаем на вход целое число, введенное пользователем, и записываем его в переменную.
- Используем цикл
for
, значения которого варьируются в диапазоне от 2 до данного целого числа. - Если число из этого диапазона делит данное число без остатка, оно добавляется в специально созданный для этого список.
- Затем список сортируется и минимальное число из него выводится на экран.
- Конец.
Исходный код
Ниже дан исходный код для нахождения и вывода наименьшего делителя. Результаты работы программы также даны ниже.
n = int(input("Введите целое число:")) a = [] for i in range(2, n+1): if(n % i == 0): a.append(i) a.sort() print("Наименьший делитель равен:", a[0])
Объяснение работы программы
- Пользователь вводит целое число, которое записывается в переменную.
- Задаем цикл
for
от 2 до введенного числа. - Если остаток от операции деления равен 0, это означает, что данное число является делителем. Эта проверка осуществляется при помощи оператора деления по модулю
%
. - После этого данный делитель добавляется в список.
- Затем список сортируется и его минимальный элемент выводится на экран.
Результаты работы программы
Пример 1: Введите целое число:75 Наименьший делитель равен: 3 Пример 2: Введите целое число:64 Наименьший делитель равен: 2
Skip to content
Задача «Минимальный делитель»
Условие
Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1.
Решение задачи от разработчиков на Python:
Другое решение задачи на Python:
Смотреть видео — Задача «Минимальный делитель» решение на Python
Делитесь с друзьями ссылкой на ответ и задавайте вопросы в комментариях! 👇
Related Posts