Related Articles
Count Pandigital Fractions pairs in given Array
• Last Updated : 27 Aug, 2020

Given an array arr[], the task is to count the pairs in the array such that arr[i]/arr[j] is a Pandigital Fraction.

A fraction N/D is called a Pandigital Fraction if the fraction contains all the digits from 0 to 9.

Examples:

Input: arr = [ 12345, 67890, 123, 4567890 ]
Output:
Explanation:
The fractions are 12345/67890, 12345/4567890, and 123/4567890

Input: arr = [ 12345, 6789 ]
Output:

Approach: The idea is to iterate over every possible pair of the array using two nested loops and for every pair concatenate arr[i] and arr[j] into a single number and check if the concatenation of arr[i] and arr[j] is a Pandigital number in base 10 then increment count.

Below is the implementation of the above approach:

## Python3

 # Python3 implementation of the # above approach  import math   # Function to concatenate # two numbers into onedef numConcat(num1, num2):          # Find number of digits in num2      digits = len(str(num2))          # Add zeroes to the end of num1      num1 = num1 * (10**digits)          # Add num2 to num1      num1 += num2          return num1        # Return true if n is pandigit# else return false.  def checkPanDigital(n):    n = str(n)    b = 10          # Checking length is     # less than base      if (len(n) < b):          return 0;          hash =  * b;             # Traversing each digit    # of the number.      for i in range(len(n)):                      # If digit is integer          if (n[i] >= '0' and \            n[i] <= '9'):              hash[ord(n[i]) - ord('0')] = 1;              # If digit is alphabet          elif (ord(n[i]) - ord('A') <= \                            b - 11):              hash[ord(n[i]) - \                 ord('A') + 10] = 1;          # Checking hash array, if any index is      # unmarked.      for i in range(b):          if (hash[i] == 0):              return 0;          return 1;   # Returns true if N is a # Pandigital Fraction Numberdef isPandigitalFraction(N, D):    join = numConcat(N, D)    return checkPanDigital(join)  # Returns number pandigital fractions# in the arraydef countPandigitalFraction(v, n) :         # iterate over all      # pair of strings     count = 0    for i in range(0, n) :             for j in range (i + 1,                          n) :                         if (isPandigitalFraction(v[i],                              v[j])) :                 count = count + 1    return count       # Driver Code if __name__ == "__main__":             arr = [ 12345, 67890, 123, 4567890 ]     n = len(arr)         print(countPandigitalFraction(arr, n))
Output:
3


Time Complexity: O(N2)
Reference: https://mathworld.wolfram.com/PandigitalFraction.html

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up