Descomponer un numero en factores primos
Lo primero que se puede hacer es dividir por 2 todas las veces que sea posible, con esto nos ahorramos la prueba de todos los números pares, ya que no tiene sentido dividir por estos debido a que todos los números pares tiene el 2 como factor primo.
Luego de sacar el 2 como factor primos comenzamos a dividir solo por los números impares,para esto comenzamos una variable en 3 y la iremos aumentando en 2 unidades cada que se cumpla cierta condición.
Lo ultimo es que no es necesario probar con todos los números hasta llegar el numero que se quiere descomponer, basta con probar hasta la raíz cuadrada de este.
Solución:
import math #Esta librería tiene diversas operaciones matemáticas
fact=[] #se crea una lista vacía para almacenar los factores primos
n=float(input("Ingrese el número: "))
numero=n #almacenamos el numero en otra parte para que no se modifique
#Lo primero es dividir por 2
while(numero%2==0):
fact.append(2) #almacenos el 2 como factor primo
numero=numero/2 #actualizo el numero
#lo siguiente es dividir por los impares
divisor=3 #como se dijo comenzamos desde el numero 3
#Hallo la raíz del número a descomponer actualmente, es decir, luego de sacar al 2 como factor primo (si es que el número tiene este factor)
root=int(math.sqrt(numero)) # Solo hace falta tomar la parte entera de la raíz
while(divisor<=root and numero>1):
if (numero%divisor==0):
fact.append(divisor) # agregamos el factor a la lista de factores primos
numero=numero/divisor #actualizamos el numero a descomponer
else:
#si el número no es divisible de forma exacta aumentamos el divisor al próximo número impar
divisor+=2
#Si el numero o es igual a uno luego de terminar este ciclo es porque nos encontramos con un factor que ya no es reducible, por lo tanto este sera el ultimo factor primo
if (numero>1):
fact.append(int(numero))
print(fact) # se imprime la lista de factores primos