# 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.

Attention reader! All those who say programming isn't for kids, just haven't met the right mentors yet. Join the  Demo Class for First Step to Coding Coursespecifically designed for students of class 8 to 12.

The students will get to learn more about the world of programming in these free classes which will definitely help them in making a wise career choice in the future.

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

My Personal Notes arrow_drop_up