Форум сайта python.su
Собственно задача:
Дано натуральное число n>1. Выведите его наименьший делитель, отличный от 1. Решение оформите в виде функции MinDivisor(n). Алгоритм должен иметь сложность порядка корня квадратного из n.
Указание. Если у числа n нет делителя не превосходящего корня из n, то число n — простое и ответом будет само число n. А у всех составных чисел обязательно есть делители, отличные от единицы и не превосходящие корня из n.
Формат ввода:
Вводится натуральное число.
Формат вывода:
Выведите ответ на задачу.
from math import sqrt n = int(input()) def MinDivisor(n): i = 2 if i <= sqrt(n): while n % i != 0: i += 1 print(i) else: print(n) MinDivisor(n)
Отредактировано Sania (Сен. 26, 2017 17:11:11)
Офлайн
Sania
вы перепутали местами if и while
from math import sqrt n = int(input()) def MinDivisor(n): i = 2 while n % i != 0: if i >= sqrt(n): print(n) return i += 1 print(i) MinDivisor(n)
Офлайн
FishHook
Спасибо за помощь, действительно… даже стыдно как то, всё ж логично
Офлайн
SaniaНадо проверить двойку отдельно, а потом цикл начинать с тройки и прибавлять по два. Это оптимально. Используется при поиске простых чисел обычно.
Пытался гуглить, даже нашёл пару решений отличных от моего.
Офлайн