Python - Factorizar
Ir a la navegación
Ir a la búsqueda
#!/bin/python3
from os import remove
from os.path import exists, expanduser
from sys import argv
from time import time
####################################################
def compruebaPrimo(num):
from math import sqrt
esPrimo = True
#El 0 y el 1 NO son primos
if num == 0 or num == 1:
esPrimo =False
#Con llegar hasta la raíz cuadrada de num llega
for n in range(2,int(sqrt(num))+1):
# print(n)
if num%n == 0:
esPrimo = False
break
return esPrimo
####################################################
inicio = time()
if len(argv) > 1:
n=int(argv[1])
else:
n=1000000
dictFactor = {}
listPrimos = [2]
while n != 1:
# print('-'*30)
# print(str(n))
# print(listPrimos)
# print(dictFactor)
divisor = listPrimos[-1]
if n % divisor == 0:
# print('Dividimos ' + str(n) + ' entre ' + str(divisor))
if divisor in dictFactor.keys():
dictFactor[divisor] = dictFactor[divisor] + 1
else:
dictFactor.setdefault(divisor, 1)
n = n / divisor
else:
nuevoPrimo = listPrimos[-1] + 1
while True:
# print('Buscando nuevo primo : ')
# print(nuevoPrimo)
if compruebaPrimo(nuevoPrimo):
listPrimos.append(nuevoPrimo)
break
else:
nuevoPrimo = nuevoPrimo + 1
homedir = expanduser("~")
archivo = homedir+'/factorizar.txt'
if exists(archivo):
remove(archivo)
fw = open(archivo,"w")
for k,v in dictFactor.items():
fw.write(str(k) + ' : ' + str(v) + '\n')
fw.close()
fin = time()
print(dictFactor)
print("Factorización finalizado : " + str(fin-inicio))
exit()