Python - Teoría de Números
#30 ejemplos de funciones sobre teoría de números en Python:
#1. Verificar si un número es par:
def es_par(numero):
return numero % 2 == 0
#2. Verificar si un número es impar:
def es_impar(numero):
return numero % 2 != 0
#3. Verificar si un número es primo:
def es_primo(numero):
if numero < 2:
return False
for i in range(2, int(numero ** 0.5) + 1):
if numero % i == 0:
return False
return True
#4. Obtener los factores de un número:
def obtener_factores(numero):
factores = []
for i in range(1, numero + 1):
if numero % i == 0:
factores.append(i)
return factores
#5. Obtener la suma de los factores de un número:
def obtener_suma_factores(numero):
suma = 0
for i in range(1, numero + 1):
if numero % i == 0:
suma += i
return suma
#6. Obtener la cantidad de factores de un número:
def obtener_cantidad_factores(numero):
cantidad = 0
for i in range(1, numero + 1):
if numero % i == 0:
cantidad += 1
return cantidad
#7. Obtener el máximo común divisor de dos números:
def obtener_mcd(numero1, numero2):
while numero2 != 0:
resto = numero1 % numero2
numero1 = numero2
numero2 = resto
return numero1
#8. Obtener el mínimo común múltiplo de dos números:
def obtener_mcm(numero1, numero2):
mcd = obtener_mcd(numero1, numero2)
return (numero1 * numero2) // mcd
#9. Obtener la suma de los dígitos de un número:
def obtener_suma_digitos(numero):
suma = 0
while numero != 0:
suma += numero % 10
numero //= 10
return suma
#10. Verificar si un número es perfecto:
def es_perfecto(numero):
suma = 0
for i in range(1, numero):
if numero % i == 0:
suma += i
return suma == numero
#11. Verificar si un número es abundante:
def es_abundante(numero):
suma = 0
for i in range(1, numero):
if numero % i == 0:
suma += i
return suma > numero
#12. Verificar si un número es deficiente:
def es_deficiente(numero):
suma = 0
for i in range(1, numero):
if numero % i == 0:
suma += i
return suma < numero
#13. Obtener la raíz cuadrada de un número:
def obtener_raiz_cuadrada(numero):
return numero ** 0.5
#14. Obtener la potencia de un número:
def obtener_potencia(base, exponente):
return base ** exponente
#15. Obtener el factorial de un número:
def obtener_factorial(numero):
factorial = 1
for i in range(1, numero + 1):
factorial *= i
return factorial
#16. Obtener el número de Fibonacci de un índice:
def obtener_fibonacci(indice):
if indice == 0:
return 0
elif indice == 1:
return 1
else:
return obtener_fibonacci(indice - 1) + obtener_fibonacci(indice - 2)
#17. Verificar si un número es un número de Fibonacci:
def es_fibonacci(numero):
if numero == 0 or numero == 1:
return True
a, b = 0, 1
while b < numero:
a, b = b, a + b
return b == numero
#18. Obtener los números primos hasta un límite:
def obtener_primos(limite):
primos = []
for numero in range(2, limite + 1):
es_primo = True
for i in range(2, int(numero ** 0.5) + 1):
if numero % i == 0:
es_primo = False
break
if es_primo:
primos.append(numero)
return primos
#19. Obtener la descomposición en factores primos de un número:
def obtener_factores_primos(numero):
factores_primos = []
divisor = 2
while divisor <= numero:
if numero % divisor == 0:
factores_primos.append(divisor)
numero //= divisor
else:
divisor += 1
return factores_primos
#20. Verificar si dos números son amigos:
def son_amigos(numero1, numero2):
suma_divisores1 = sum(obtener_factores(numero1)) - numero1
suma_divisores2 = sum(obtener_factores(numero2)) - numero2
return suma_divisores1 == numero2 and suma_divisores2 == numero1
#21. Obtener los números amigos hasta un límite:
def obtener_amigos(limite):
amigos = []
for numero1 in range(2, limite + 1):
numero2 = sum(obtener_factores(numero1)) - numero1
if numero1 < numero2 and sum(obtener_factores(numero2)) - numero2 == numero1:
amigos.append((numero1, numero2))
return amigos
#22. Verificar si un número es un número perfecto de Mersenne:
def es_mersenne(numero):
exponente = 0
while 2 ** exponente <= numero + 1:
if 2 ** exponente == numero + 1:
return es_primo(numero)
exponente += 1
return False
#23. Obtener los números perfectos hasta un límite:
def obtener_perfectos(limite):
perfectos = []
for numero in range(2, limite + 1):
if es_perfecto(numero):
perfectos.append(numero)
return perfectos
#24. Obtener los números de Armstrong hasta un límite:
def obtener_armstrong(limite):
armstrong = []
for numero in range(1, limite + 1):
suma = 0
for digito in str(numero):
suma += int(digito) ** len(str(numero))
if suma == numero:
armstrong.append(numero)
return armstrong
#25. Verificar si un número es un número de Harshad:
def es_harshad(numero):
suma_digitos = sum(int(digito) for digito in str(numero))
return numero % suma_digitos == 0
#26. Obtener los números de Harshad hasta un límite:
def obtener_harshad(limite):
harshad = []
for numero in range(1, limite + 1):
if es_harshad(numero):
harshad.append(numero)
return harshad
#27. Verificar si un número es un número de Kaprekar:
def es_kaprekar(numero):
cuadrado = str(numero ** 2)
for i in range(1, len(cuadrado)):
parte1 = int(cuadrado[:i])
parte2 = int(cuadrado[i:])
if parte1 != 0 and parte2 != 0 and parte1 + parte2 == numero:
return True
return False
#28. Obtener los números de Kaprekar hasta un límite:
def obtener_kaprekar(limite):
kaprekar = []
for numero in range(1, limite + 1):
if es_kaprekar(numero):
kaprekar.append(numero)
return kaprekar
#29. Verificar si un número es un número de Smith:
def es_smith(numero):
factores_primos = obtener_factores_primos(numero)
suma_digitos = sum(int(digito) for digito in str(numero))
suma_digitos_factores = sum(sum(int(digito) for digito in str(factor)) for factor in factores_primos)
return suma_digitos == suma_digitos + factores_primos - 1 if len(factores_primos) > 1 else 0
#30. Obtener los números de Smith hasta un límite:
def obtener_smith(limite):
smith = []
numero = 4
while len(smith) < limite:
if es_smith(numero):
smith.append(numero)
numero += 1
return smith