filmov
tv
Python - Nivel 18 - Reto 10 - Descomponer un número en sus factores primos
Показать описание
ACLARACIÓN IMPORTANTE:
En este video llevamos a cabo una función que descompone un número en los factores primos de los que está compuesto. Pero debido a las limitaciones de los tipos de datos flotantes en python, y por tanto a la precisión de la división, este programa puede dar errores en números muy elevados.
La forma de python para expresar números muy elevados es mediante el uso de la e:
15_000_000_000_000_000 == 1.5e+16
True
Por tanto, cuando se hace una división de un número muy elevado el resultado puede dar problemas de precisión, lo que para el programa que nos ocupa se puede solucionar usando en su lugar la división entera, ya que no usa la notación con e:
141674867017458786543455 / 2
7.083743350872939e+22
141674867017458786543455 // 2
70837433508729393271727
Por tanto, el programa optimizado incluiría poner // en vez de / y añadir el condicional:
if n == 1:
return primos
para evitar que el programa siga iterando cuando ya no hay más primos:
============================
def descomponer(n):
primos = []
for i in range(2, n+1):
while n % i == 0:
n = n // i
#print(primos,i, n)
if n == 1:
return primos
============================
print(descomponer(63525567747779927405))
Si no se utilizase la división entera, este número tan elevado daría error debido como decíamos
a la notación con e para números muy elevados que utiliza python.
---------------------------------------------------------------------
RETO PARA RESOLVER:
Hacer una función que halla los múltiplos de un número (algunos pues son infinitos).
Hacer una función que halla los divisores de un número (todos).
---------------------------------------------------------------------
En este video llevamos a cabo una función que descompone un número en los factores primos de los que está compuesto. Pero debido a las limitaciones de los tipos de datos flotantes en python, y por tanto a la precisión de la división, este programa puede dar errores en números muy elevados.
La forma de python para expresar números muy elevados es mediante el uso de la e:
15_000_000_000_000_000 == 1.5e+16
True
Por tanto, cuando se hace una división de un número muy elevado el resultado puede dar problemas de precisión, lo que para el programa que nos ocupa se puede solucionar usando en su lugar la división entera, ya que no usa la notación con e:
141674867017458786543455 / 2
7.083743350872939e+22
141674867017458786543455 // 2
70837433508729393271727
Por tanto, el programa optimizado incluiría poner // en vez de / y añadir el condicional:
if n == 1:
return primos
para evitar que el programa siga iterando cuando ya no hay más primos:
============================
def descomponer(n):
primos = []
for i in range(2, n+1):
while n % i == 0:
n = n // i
#print(primos,i, n)
if n == 1:
return primos
============================
print(descomponer(63525567747779927405))
Si no se utilizase la división entera, este número tan elevado daría error debido como decíamos
a la notación con e para números muy elevados que utiliza python.
---------------------------------------------------------------------
RETO PARA RESOLVER:
Hacer una función que halla los múltiplos de un número (algunos pues son infinitos).
Hacer una función que halla los divisores de un número (todos).
---------------------------------------------------------------------
Комментарии