We have an array of numbers ex. {0, 5, 4, 8, 9}. We have to find the number of permutations that when the array is turned into a number (ex. {6, 8, 3, 2} -> 6832) the number will be divisible by 4. The number of elements of the vector will be max. 17 so I just need to find an exponentional algorithm. I've tried lots of different methods and settled on finding "pairs" of numbers but I'm interested is there a less sanity-destroying method that will work also for ex. numbers divisible by 8.
How many permutations of an array when created into a number are divisible by 4 or 8?
61 Views Asked by K123 At
1
There are 1 best solutions below
Related Questions in ALGORITHM
- MCNP 6 - Doubts about cells
- Given partially sorted array of type x<y => first apperance of x comes before first of y, sort in average O(n)
- What is the algorithm behind math.gcd and why it is faster Euclidean algorithm?
- Purpose of last 2 while loops in the merge algorithm of merge sort sorting technique
- Dots and Boxes with apha-beta pruning
- What is the average and worst-case time complexity of my string searching algorithm?
- Building a School Schedule Generator
- TC problem 5-2:how to calculate the probability of the indicator random variable?
- LCA of a binary tree implemented in Python
- Identify the checksum algorithm
- Algorithm for finding a subset of nodes in a weighted connected graph such that the distance between any pair nodes are under a postive number?
- Creating an efficent and time-saving algorithm to find difference between greater than and lesser than combination
- Algorithm to find neighbours of point by distance with no repeats
- Asking code suggestions about data structure and algorithm
- Heap sort with multithreading
Related Questions in LANGUAGE-AGNOSTIC
- Name for defining a function with fewer arguments that calls the original function
- Given a radius R, find the minimal number of circles to maximize the area where the circles' center belong to a set of points P
- How to get the previous index of an array (ring buffer way) in a clean way?
- Quicksort partition algorithm -- why is the swap with the pivot value outside of the loop?
- How to compute overlap time of two arrays of (price, time) elements
- Proper way to lru cache a read call for data that may or may not have been written at the time of the call
- Are concurrent non-atomic writes to never-read memory safe?
- How to apply the same operations to rows in a matrix to columns without code duplicaton?
- Want to match a string exactly, despite variants, and remove only that string
- goto statement in language standard
- How many permutations of an array when created into a number are divisible by 4 or 8?
- How many distinct digit permutations exist for a specific N-digit number?
- Why is there an error in this Dynamic Scoping example?
- What diff algorithm relies on finding the longest common prefix and suffix and cursing on the middle substring?
- How to determine if there are n consecutive pieces of the same color after every move?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
A number can be divisible by four if and only if the number formed by its last two digits are divisible by four. We can disregard eight since anything divisible by eight is also divisible by four.
Say your array, A, has size n.
Count the 2+ digit numbers that are divisible by 4. Say this is k. Having any of these at the end results in a number divisible by 4, so these contribute k * (n-1)! to the total.
If there are any even 1 digit numbers
2a. Count the 1-digit numbers congruent to 0 mod 4.
2b. Count the 1-digit numbers congruent to 2 mod 4.
2c. Count all even numbers
2d. Note that n - (count of even numbers) is the count of odd numbers.
2e. Add (n-2)! * (2a * (2c - 1)) to the total.
2f. Add (n-2)! * (2b * 2d) to the total.
This works because the valid predecessors of a last digit d are:
in your example [0,5,4,8,9]:
2a. There are 3 digits congruent to 0 mod 4: 0, 4, 8
2b. There are 0 digits congruent to 2 mod 4
2c: There are 3 even numbers: 0, 4, 8
2d: There are 2 odd numbers: 5, 9
Here, our total is 0 + 6 * 3 * 2 + 6 * 0 * 2 = 36