Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 14, 2014 15:22:08

Ferry_G
Зарегистрирован: 2014-10-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти наибольший простой делитель

Помогите решить задачу


Простыми делителями числа 13195 являются 5, 7, 13 и 29. Найти наибольший простой делитель заданного числа n.
Для этого объявить функцию f(n), которая вернет наибольший простой делитель n.

Офлайн

#2 Окт. 14, 2014 20:49:50

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Найти наибольший простой делитель

я так понимаю тебе нужно сделать нечто подобное ? http://www.cleverstudents.ru/divisibility/all_divisors_of_number.html

Офлайн

#3 Окт. 14, 2014 20:51:18

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Найти наибольший простой делитель

а вообще наибольший простой делитель числа 13195 будет число math.fabs(13195)


def delit(N)
    print(N)

Отредактировано sypper-pit (Окт. 14, 2014 20:57:04)

Офлайн

#4 Окт. 14, 2014 21:09:03

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Найти наибольший простой делитель

Если решать в лоб, то

def f(n):
    lst = [i for i in range(2, n // 2 +1) if not n % i]
    if not lst:
        return 1
    return max(lst)
(возврат 1 означает, что n - простое число). Но это самый неоптимальный вариант)

Отредактировано dimy44 (Окт. 14, 2014 21:11:21)

Офлайн

#5 Окт. 15, 2014 01:44:10

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

Найти наибольший простой делитель

sypper-pit
а вообще наибольший простой делитель числа 13195 будет число math.fabs(13195)
13195 - составное число.

dimy44
Если решать в лоб, то
>>> f(8)
4
>>>



Отредактировано py.user.next (Окт. 15, 2014 01:49:42)

Офлайн

#6 Окт. 15, 2014 07:14:35

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Найти наибольший простой делитель

Тьфу. Конечно тот мой код неверен, невнимательно условие прочитал и искал просто наибольший делитель.

Офлайн

#7 Окт. 15, 2014 07:56:03

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

Найти наибольший простой делитель

#!/usr/bin/env python3
 
def factor(n):
    while n > 1:
        for i in range(2, n + 1):
            if n % i == 0:
                n = int(n / i)
                yield i
                break
 
def f(n):
    if n > 1:
        return max(factor(n))

>>> import max_pdelim
>>> max_pdelim.f(13195)
29
>>>



Отредактировано py.user.next (Окт. 15, 2014 08:13:45)

Офлайн

#8 Окт. 15, 2014 09:21:55

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Найти наибольший простой делитель

Ferry_G
объявить функцию f(n), которая вернет наибольший простой делитель n.
лучше одну, чем две :D :D
>>> def f(n):
...     pdelim = 2
...     while n > 1:
...         if n % pdelim == 0:
...             n = n/pdelim
...         else:
...             pdelim+=1
...     return pdelim
... 
>>> f(13195)
29
>>> 



Отредактировано Nata (Окт. 15, 2014 09:39:43)

Офлайн

#9 Окт. 15, 2014 11:20:28

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Найти наибольший простой делитель

py.user.next
if n % i == 0: 
     n = int(n / i)
а зачем тут int()?



Отредактировано Nata (Окт. 15, 2014 11:21:31)

Офлайн

#10 Окт. 15, 2014 12:21:32

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

Найти наибольший простой делитель

Nata
а зачем тут int()?
Там она подаётся в range(), а результат деления - вещественный.

Nata
лучше одну, чем две
[guest@localhost max_pdelim]$ python3 -mdoctest max_pdelim.test 
**********************************************************************
File "max_pdelim.test", line 4, in max_pdelim.test
Failed example:
f(0)
Expected nothing
Got:
2
**********************************************************************
File "max_pdelim.test", line 7, in max_pdelim.test
Failed example:
f(1)
Expected nothing
Got:
2
**********************************************************************
1 items had failures:
2 of 14 in max_pdelim.test
***Test Failed*** 2 failures.
[guest@localhost max_pdelim]$

Для нуля там будет бесконечно большое простое число, а для единицы не будет таких чисел, так как она делится только на себя, не являясь простым.

Почему две функции? Потому что так можно найти не только максимальное.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version