The number `1035` is the smallest integer that exhibits a non frequent property: one its multiples, `3105 = 1035 * 3`, has its same digits but in different order, in other words, `3105`, is one of the permutations of `1035`.

The number `125874` is the first integer that has this property when the multiplier is `2`, thus: `125874 * 2 = 251748`

Make the function `search_permMult()`, that receives an upper bound, nMax and a factor k and will output the amount of pairs bellow nMax that are permuted when an integer of this range is multiplied by `k`. The pair will be counted if the multiple is less than `nMax`, too

Let'see some cases:
```python
search_permMult(10000, 7) === 1 # because we have the pair 1359, 9513
search_permMult(5000, 7) === 0 # no pairs found, as 9513 > 5000

search_permMult(10000, 4) === 2 # we have two pairs (1782, 7128) and (2178, 8712)
search_permMult(8000, 4) === 1 # only the pair (1782, 7128) 

search_permMult(5000, 3) === 1 # only the pair (1035, 3105)
search_permMult(10000, 3) === 2 # found pairs (1035, 3105) and (2475, 7425)
```
Features of the random Tests:
```
10000 <= nMax <= 100000
3 <= k <= 7
```
Enjoy it and happy coding!!

Source: codewars | Difficulty: EASY
Tags: Fundamentals

Combinatorics

Data structures

Mathematics

Starter code: def search_permMult(nMax, k):
	

Solutions:
from bisect import bisect
memo = {3: [3105, 7425, 30105, 31050, 37125, 42741, 44172, 71253, 72441, 74142, 74250, 74628, 74925, 82755, 85725], 4: [7128, 8712, 67128, 70416, 71208, 71280, 71328, 71928, 72108, 78912, 79128, 80712, 86712, 87120, 87132, 87192, 87912, 95832], 5: [], 6: [8316, 83160, 83916, 84510, 89154, 91152], 7: [9513, 81816, 83181, 90321, 91203, 93513, 94143, 95130, 95193, 95613]}

def search_permMult(nMax, k):
	return bisect(memo[k], nMax)


def search_permMult(nMax, k):
	x = 0
	for i in range(1000, nMax // k):
		if SameDigits(i * k, i):
			x += 1
	return x

def SameDigits(a, b):
	return sorted(list(str(a))) == sorted(list(str(b)))


def search_permMult(n_max, k):
	return sum((1 for n in range(1, n_max // k) if sorted(str(n)) == sorted(str(n * k))))


def search_permMult(nMax, k):

	def tod(n):
		return ''.join(sorted([d for d in str(n)]))
	i = 1
	cnt = 0
	while i <= nMax // k:
		if tod(i) == tod(i * k):
			cnt += 1
		i += 1
	return cnt