Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 26, 2017 17:06:46

Sania
Зарегистрирован: 2017-09-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помощи для сдачи задачи на одном из онлайн курсов

Собственно задача:
Дано натуральное число 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)

Вроде выводит правильные ответы при запуске, но при отправке на сайт пишет:
“Test 55
Time Limit Exceeded”
Пытался гуглить, даже нашёл пару решений отличных от моего. Но их сайт тоже не принимает…

Отредактировано Sania (Сен. 26, 2017 17:11:11)

Офлайн

#2 Сен. 26, 2017 17:54:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Прошу помощи для сдачи задачи на одном из онлайн курсов

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)



Офлайн

#3 Сен. 26, 2017 21:10:56

Sania
Зарегистрирован: 2017-09-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помощи для сдачи задачи на одном из онлайн курсов

FishHook
Спасибо за помощь, действительно… даже стыдно как то, всё ж логично

Офлайн

#4 Сен. 27, 2017 08:30:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9894
Репутация: +  854  -
Профиль   Отправить e-mail  

Прошу помощи для сдачи задачи на одном из онлайн курсов

Sania
Пытался гуглить, даже нашёл пару решений отличных от моего.
Надо проверить двойку отдельно, а потом цикл начинать с тройки и прибавлять по два. Это оптимально. Используется при поиске простых чисел обычно.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version