В вашем коде есть некоторые логические ошибки. Вы несколько усложняете вещи, возвращая списки делителей и простых чисел. У вас уже есть al oop от prime_factors()
до go через все числа от 2 до n
. Таким образом, вы можете упростить ваши функции isdivisor()
и isprime()
:
def isdivisor(i, n):
return n % i == 0
def isprime(n):
i = 2
while i < n:
if n % i == 0:
return False
i += 1
return True
Затем измените свой основной l oop в prime_factors()
следующим образом:
def prime_factors(n):
i = 2
lst = []
while i < n:
if isdivisor(i, n) and isprime(i):
lst.append(i)
i += 1
return lst
Вывод:
>>>prime_factors(15)
[3,5]