Найти - Пользователи
Полная версия: Найти наибольший простой делитель
Начало » Python для новичков » Найти наибольший простой делитель
1 2
Ferry_G
Помогите решить задачу


Простыми делителями числа 13195 являются 5, 7, 13 и 29. Найти наибольший простой делитель заданного числа n.
Для этого объявить функцию f(n), которая вернет наибольший простой делитель n.
sypper-pit
я так понимаю тебе нужно сделать нечто подобное ? http://www.cleverstudents.ru/divisibility/all_divisors_of_number.html
sypper-pit
а вообще наибольший простой делитель числа 13195 будет число math.fabs(13195)


def delit(N)
    print(N)
dimy44
Если решать в лоб, то

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 - простое число). Но это самый неоптимальный вариант)
py.user.next
sypper-pit
а вообще наибольший простой делитель числа 13195 будет число math.fabs(13195)
13195 - составное число.

dimy44
Если решать в лоб, то
>>> f(8)
4
>>>
dimy44
Тьфу. Конечно тот мой код неверен, невнимательно условие прочитал и искал просто наибольший делитель.
py.user.next
#!/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
>>>
Nata
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
py.user.next
if n % i == 0: 
     n = int(n / i)
а зачем тут int()?
py.user.next
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]$

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

Почему две функции? Потому что так можно найти не только максимальное.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB