Моя задача - вернуть простые множители целого числа (n). Мой вопрос в том, как мне выразить это в математическом выражении для кодирования? Я знаю, что простые числа — это числа, которые делятся только на 1 и само на себя, но не знаю, как поместить это в код.
Однако я нашел эту кодировку, которая работает, но я не знаю, почему:
def primes(n):
primfac = []
d = 2
while d*d <= n:
while (n % d) == 0:
primfac.append(d)
n //= d
d += 1
if n > 1:
primfac.append(n)
return primfac
Может кто-нибудь объяснить мне, почему эта кодировка работает? Почему d
выбрано как 2 для начала вместо 1? Кроме того, почему он возводит в квадрат d
и проверяет, равно ли оно n или меньше? и так далее.
1
не является простым числом. - person pp_   schedule 07.03.2016[d | d<-[2..x], rem x d==0, isPrime d]
(этот вопрос на Haskell, но на Python он похож); хотя как алгоритм ваш код намного намного эффективнее. - person Will Ness   schedule 07.03.2016