Вы можете увеличить i
, только если i
не делит n. Кроме того, вы можете просто проверить до квадрата root из n
, так как если i
делит n
, то i <= sqrt(n)
.
Пример:
import math
def prime_factors(n):
i, factors = 2, []
while n > 1 and i <= int(math.sqrt(n)):
if n%i == 0:
n/=i
factors.append(i)
else:
i+=1
if n > 1:
factors.append(int(n))
return factors
>>> prime_factors(64)
[2, 2, 2, 2, 2, 2]
>>> prime_factors(28)
[2, 2, 7]
>>> prime_factors(31)
[31]
Примечание . Вам не нужно проверять, является ли i
простым числом. i
не может быть не простым, так как если бы i
не было простым, тогда существовал бы j < i
, который делит i
с j
, являющимся простым. Поскольку i
переходит от 2
к sqrt(n)
, он встречался бы раньше в l oop.