Anda di halaman 1dari 2

###########################################

# #
# PROGRAMA PARA FACTORIZAR #
# NÚMEROS NATURALES Y HALLAR #
# TODOS SUS DIVISORES #
# #
##########################################

from math import sqrt # De la librería de matemáticas importa la función sqrt

# Esta función calcula todos los factores primos

def factorizar(n):
factores_0=[]
while n>1:
k=int(sqrt(n))
for p in range(2,k+2):
resto=n%p
if resto==0:
factores_0.append(p)
n=int(n/p)
break
if p==(k+1):
factores_0.append(n) #n es primo
n=1
return factores_0

# Esta función calcula todos los divisores

def divisores(m):
factor=factorizar(m)
divisor=[1]
potencias=[]
n=len(factor)
i=0
while i<n:
p=factor[i]
pot=[p]
d=p
i+=1
while i<n and p==factor[i]:
d=d*p
pot.append(d)
i+=1
potencias.append(pot)
for a in potencias:
n=len(divisor)
for p in a:
for j in range(n):
divisor.append(divisor[j]*p)
return divisor
# Función para introducir un número entero

def intro_num():
print('-'*60)
m=int(float(input('introduce un número>')))
while m<=0:
print('Debes introducir un número entero positivo.')
print('-'*60)
m=int(float(input('Introduce un número>')))
return m

# Esta funcíón ordena una lista de números

def ordenar(a):
n=len(a)
flag=False
i=0
while(i<n or flag==False):
i+=1
flag=True
for j in range(n-i):
if a[j]>a[j+1]:
flag=False
aux=a[j+1]
a[j+1]=a[j]
a[j]=aux
return a

# CUERPO PRINCIPAL DEL PROGRAMA

while True:
print('-'*60)
print('a) Factorizar un número.')
print('b) Calcular los divisores de un número.')
print('c) Salir.')
print('-'*60)
opcion=input('Introduce una opción.')
if opcion=='a':
m=intro_num()
factores=factorizar(m)
print('-'*60)
print('Los factores de',m,'son:')
print(factores)
elif opcion=='b':
m=intro_num()
print('-'*60)
print('Los divisores del número ',m,' son: ')
print(ordenar(divisores(m)))
elif opcion=='c': break
else:
print('-'*60)
print('Debes introducir una opción.')

Anda mungkin juga menyukai