# Rearrangement of a number which is also divisible by it

Given a number n, we need to rearrange all its digits such that the new arrangement is divisible by n. Also, the new number should not be equal to x. If no such rearrangement is possible, print -1.

**Examples:**

Input : n = 1035 Output : 3105 The result 3105 is divisible by given n and has the same set of digits. Input : n = 1782 Output : m = 7128

** Simple Approach :** Find all the permutation of given n and then check whether it is divisible by n or not also check that new permutation should not be equal to n.

** Efficient Approach :** Let’s suppose that y is our result then y = m * n, also we know that y must be a rearrangement of digits of n so we can say now restrict m (the multiplier) as per given conditions.

1) y has the same number of digits as n has. So, m must be less than 10.

2) y must not be equal to n. So, m will be greater than 1.

So we get the multiplier m in the range [2,9]. So we will find all the possible y and then check that should y has the same digits as n or not.

## C++

`// CPP program for finding rearrangement of n ` `// that is divisible by n ` `#include<bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// perform hashing for given n ` `void` `storeDigitCounts(` `int` `n, vector<` `int` `> &hash) ` `{ ` ` ` `// perform hashing ` ` ` `while` `(n) ` ` ` `{ ` ` ` `hash[n%10]++; ` ` ` `n /= 10; ` ` ` `} ` `} ` ` ` `// check whether any arrangement exists ` `int` `rearrange (` `int` `n) ` `{ ` ` ` `// Create a hash for given number n ` ` ` `// The hash is of size 10 and stores ` ` ` `// count of each digit in n. ` ` ` `vector<` `int` `> hash_n(10, 0); ` ` ` `storeDigitCounts(n, hash_n); ` ` ` ` ` `// check for all possible multipliers ` ` ` `for` `(` `int` `mult=2; mult<10; mult++) ` ` ` `{ ` ` ` `int` `curr = n*mult; ` ` ` ` ` `vector<` `int` `> hash_curr(10, 0); ` ` ` `storeDigitCounts(curr, hash_curr); ` ` ` ` ` `// check hash table for both. ` ` ` `// Please refer below link for help ` ` ` `// of equal() ` ` ` `if` `(equal(hash_n.begin(), hash_n.end(), ` ` ` `hash_curr.begin())) ` ` ` `return` `curr; ` ` ` `} ` ` ` `return` `-1; ` `} ` ` ` `// driver program ` `int` `main() ` `{ ` ` ` `int` `n = 10035; ` ` ` `cout << rearrange(n); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program for finding rearrangement ` `# of n that is divisible by n ` ` ` `# Perform hashing for given n ` `def` `storeDigitCounts(n, ` `Hash` `): ` ` ` ` ` `# perform hashing ` ` ` `while` `n > ` `0` `: ` ` ` ` ` `Hash` `[n ` `%` `10` `] ` `+` `=` `1` ` ` `n ` `/` `/` `=` `10` ` ` `# check whether any arrangement exists ` `def` `rearrange(n): ` ` ` ` ` `# Create a hash for given number n ` ` ` `# The hash is of size 10 and stores ` ` ` `# count of each digit in n. ` ` ` `hash_n ` `=` `[` `0` `] ` `*` `10` ` ` `storeDigitCounts(n, hash_n) ` ` ` ` ` `# check for all possible multipliers ` ` ` `for` `mult ` `in` `range` `(` `2` `, ` `10` `): ` ` ` ` ` `curr ` `=` `n ` `*` `mult ` ` ` ` ` `hash_curr ` `=` `[` `0` `] ` `*` `10` ` ` `storeDigitCounts(curr, hash_curr) ` ` ` ` ` `# check hash table for both. ` ` ` `if` `hash_n ` `=` `=` `hash_curr: ` ` ` `return` `curr ` ` ` ` ` `return` `-` `1` ` ` `# Driver Code ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` ` ` `n ` `=` `10035` ` ` `print` `(rearrange(n)) ` ` ` `# This code is contributed by Rituraj Jain ` |

*chevron_right*

*filter_none*

**Output:**

30105

This article is contributed by **Shivam Pradhan (anuj_charm)**. 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.

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

## Recommended Posts:

- Count the number of pairs (i, j) such that either arr[i] is divisible by arr[j] or arr[j] is divisible by arr[i]
- Number of ways to split a binary number such that every part is divisible by 2
- Minimum number of swaps required to make a number divisible by 60
- Check if a number is divisible by all prime divisors of another number
- Number of digits to be removed to make a number divisible by 3
- Find if a number is divisible by every number in a list
- Number of substrings with length divisible by the number of 1's in it
- Number is divisible by 29 or not
- Number of divisors of a given number N which are divisible by K
- Multiply the given number by 2 such that it is divisible by 10
- Number of subsets with sum divisible by M | Set 2
- Check if the given number is divisible by 71 or not
- Find the Kth number which is not divisible by N
- Check if a number is divisible by 31 or not
- Check if a number is divisible by 47 or not