Número de vampiro

Introducción a Vampire Number y su implementación usando python.

Introducción
En matemáticas, un número de vampiro (o verdadero número de vampiro) es un número natural compuesto v, con un número par de dígitos n, que se puede factorizar en dos enteros x e y, cada uno con n/2 dígitos y no ambos con ceros al final. , donde v contiene precisamente todos los dígitos de x y de y, en cualquier orden, contando la multiplicidad. x e y se llaman los colmillos. [Fuente Wiki ]

Ejemplos:

  • 1260 es un número de vampiro, con 21 y 60 como colmillos, ya que 21 × 60 = 1260.
  • 126000 (que se puede expresar como 21 × 6000 o 210 × 600) no lo es, ya que 21 y 6000 no tienen la longitud correcta, y tanto 210 como 600 tienen ceros finales

Los números de vampiros son:
1260, 1395, 1435, 1530, 1827, 2187, 6880, 102510, 104260, 105210, 105264, 105750, 108135, 110758, 115672, 116725, 117067, 118440, 120600, 123354, 125433, 12543, 12443, 12443, 124434, 124434, 124483, 124483, 124483, 124483, 124483, 124483, 124483, 124483, 124483, 124483, 124483, 124483, 12448ES, 12448ES, 124488, 12448ES, 12448S, 12448ES, 12448ES, 12448ES , 125460, 125500, … (secuencia A014575 en el OEIS)

Hay muchas secuencias conocidas de infinitos números de vampiros siguiendo un patrón, como:
1530 = 30×51, 150300 = 300×501, 15003000 = 3000×5001, …

Condición para que un número sea Número Vampiro:

  1. Tiene un número par de dígitos. Llamemos al número de dígitos: n
  2. Puedes obtener el número multiplicando dos enteros, x e y, cada uno con n/2 dígitos. x e y son los colmillos.
  3. Ambos colmillos no pueden terminar simultáneamente en 0.
  4. El número se puede formar con todos los dígitos de x e y, en cualquier orden y solo usando cada dígito una vez.

pseudocódigo

if digitcount is odd return false
if digitcount is 2 return false
for A = each permutation of length digitcount/2 
        selected from all the digits,
  for B = each permutation of the remaining digits,
    if either A or B starts with a zero, continue
    if both A and B end in a zero, continue
    if A*B == the number, return true
# Python code to check if a number is Vampire
# and printing Vampire numbers upto n using
# it
import itertools as it
  
# function to get the required fangs of the
# vampire number
def getFangs(num_str):
   
    # to get all possible orderings of order that
    # is equal to the number of digits of the 
    # vampire number
    num_iter = it.permutations(num_str, len(num_str))
  
    # creating the possible pairs of number by 
    # brute forcing, then checking the condition 
    # if it satisfies what it takes to be the fangs 
    # of a vampire number
    for num_list in num_iter:
        
        v = ''.join(num_list)
        x, y = v[:int(len(v)/2)], v[int(len(v)/2):]
  
        # if numbers have trailing zeroes then skip
        if x[-1] == '0' and y[-1] == '0':
            continue
  
        # if x * y is equal to the vampire number
        # then return the numbers as its fangs
        if int(x) * int(y) == int(num_str):
            return x,y
    return False
  
# function to check whether the given number is 
# vampire or not
def isVampire(m_int):
  
    # converting the vampire number to string
    n_str = str(m_int)
  
    # if no of digits in the number is odd then 
    # return false
    if len(n_str) % 2 == 1:
        return False
  
    # getting the fangs of the number
    fangs = getFangs(n_str)
    if not fangs:
        return False
    return True
  
# main driver program
n = 16000
for test_num in range(n):
    if isVampire(test_num):
        print ("{}".format(test_num), end = ", ")

Producción:

1260, 1395, 1435, 1530, 1827, 2187, 6880, 

Consulte numberphile para obtener más detalles:

Referencias:

  1. Código Rossetta
  2. Wikipedia – Número de vampiro
  3. Desbordamiento de pila
  4. Python Docs en itertools

Este artículo es una contribución de Subhajit Saha . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *