Python - Factorizar

De Manuais Informática - IES San Clemente.
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()