# Vampire Number

Introduction to Vampire Number and its implementation using python.

**Introduction**

In mathematics, a vampire number (or true vampire number) is a composite natural number v, with an even number of digits n, that can be factored into two integers x and y each with n/2 digits and not both with trailing zeroes, where v contains precisely all the digits from x and from y, in any order, counting multiplicity. *x and y are called the fangs.* [Source Wiki]

Examples:

- 1260 is a vampire number, with 21 and 60 as fangs, since 21 × 60 = 1260.
- 126000 (which can be expressed as 21 × 6000 or 210 × 600) is not, as 21 and 6000 do not have the correct length, and both 210 and 600 have trailing zeroes

The vampire numbers are:

1260, 1395, 1435, 1530, 1827, 2187, 6880, 102510, 104260, 105210, 105264, 105750, 108135, 110758, 115672, 116725, 117067, 118440, 120600, 123354, 124483, 125248, 125433, 125460, 125500, … (sequence A014575 in the OEIS)

There are many known sequences of infinitely many vampire numbers following a pattern, such as:

1530 = 30×51, 150300 = 300×501, 15003000 = 3000×5001, …

Condition for a number to be Vampire Number:

- Has a pair number of digits. Lets call the number of digits : n
- You can obtain the number by multiplying two integers, x and y, each with n/2 digits. x and y are the fangs.
- Both fangs cannot end simultaneously in 0.
- The number can be made with all digits from x and y, in any order and only using each digit once.

**Pseudocode**

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 ` `=` `", "` `) ` |

*chevron_right*

*filter_none*

Output:

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

Refer to numberphile for more details:

**References:**

This article is contributed by **Subhajit Saha**. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

## Recommended Posts:

- Count number of triplets with product equal to given number with duplicates allowed
- Maximum number formed from array with K number of adjacent swaps allowed
- Count number of trailing zeros in Binary representation of a number using Bitset
- Find minimum number to be divided to make a number a perfect square
- Number of times the largest perfect square number can be subtracted from N
- Find the number of positive integers less than or equal to N that have an odd number of digits
- Number of ways to split a binary number such that every part is divisible by 2
- Number of possible permutations when absolute difference between number of elements to the right and left are given
- Given number of matches played, find number of teams in tournament
- Super Ugly Number (Number whose prime factors are in given set)
- Find the largest good number in the divisors of given number N
- Check whether all the rotations of a given number is greater than or equal to the given number or not
- Number of digits to be removed to make a number divisible by 3
- Find the number of integers x in range (1,N) for which x and x+1 have same number of divisors
- Find the number of ways to divide number into four parts such that a = c and b = d