Count Pandigital Fractions pairs in given Array
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: 3
Explanation:
The fractions are 12345/67890, 12345/4567890, and 123/4567890Input: arr = [ 12345, 6789 ]
Output: 0
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 one def 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 = [ 0 ] * 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 Number def isPandigitalFraction(N, D): join = numConcat(N, D) return checkPanDigital(join) # Returns number pandigital fractions # in the array def 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)) |
3
Time Complexity: O(N2)
Reference: https://mathworld.wolfram.com/PandigitalFraction.html